ILIAS  trunk Revision v11.0_alpha-3011-gc6b235a2e85
ilObjSurvey Class Reference
+ Inheritance diagram for ilObjSurvey:
+ Collaboration diagram for ilObjSurvey:

Public Member Functions

 __construct (int $a_id=0, bool $a_call_by_reference=true)
 
 create ($a_upload=false)
 
 update ($a_upload=false)
 
 createReference ()
 creates reference for object More...
 
 read ()
 
 addQuestion (int $question_id)
 Adds a question to the survey (used in importer!) More...
 
 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...
 
 deleteSurveyRecord ()
 Deletes the survey from the database. More...
 
 deleteAllUserData (bool $reset_LP=true)
 Deletes all user data of a survey. More...
 
 removeSelectedSurveyResults (array $finished_ids)
 Deletes the user data of a given array of survey participants. More...
 
 getSurveyParticipants (?array $finished_ids=null, bool $force_non_anonymous=false, bool $include_invites=false)
 
 isComplete ()
 Check if survey is complete for use. More...
 
 hasQuestions ()
 
 saveCompletionStatus ()
 Saves the completion status of the survey. More...
 
 duplicateQuestionForSurvey (int $question_id, bool $a_force=false)
 Takes a question and creates a copy of the question for use in the survey. More...
 
 insertQuestion (int $question_id)
 Inserts a question in the survey and saves the relation to the database. More...
 
 isQuestionInSurvey (int $a_question_fi)
 
 insertQuestionblock (int $questionblock_id)
 
 saveUserSettings (int $usr_id, string $key, string $title, string $value)
 
 deleteUserSettings (int $id)
 
 getUserSettings (int $usr_id, string $key)
 
 saveToDb ()
 
 saveQuestionsToDb ()
 
 getQuestionGUI (string $questiontype, int $question_id)
 
 getQuestionType (int $question_id)
 
 getSurveyId ()
 
 setAnonymize (int $a_anonymize)
 set anonymize status More...
 
 getAnonymize ()
 
 setCalculateSumScore (bool $a_val)
 
 getCalculateSumScore ()
 
 isAccessibleWithoutCode ()
 
 hasAnonymizedResults ()
 
 loadFromDb ()
 
 loadQuestionsFromDb ()
 
 fixSequenceStructure ()
 
 setAuthor (string $author="")
 
 saveAuthorToMetadata (string $a_author="")
 Saves an authors name into the lifecycle metadata if no lifecycle metadata exists This will only be called for conversion of "old" surveys where the author hasn't been stored in the lifecycle metadata. More...
 
 getAuthor ()
 
 getShowQuestionTitles ()
 
 setShowQuestionTitles (bool $a_show)
 
 setIntroduction (string $introduction="")
 
 setOutro (string $outro="")
 
 getStartDate ()
 
 setStartDate (string $start_date="")
 
 setStartDateAndTime (string $start_date, string $start_time)
 
 getEndDate ()
 
 setEndDate (string $end_date="")
 
 hasStarted ()
 
 hasEnded ()
 
 setEndDateAndTime (string $end_date, string $end_time)
 
 getEvaluationAccess ()
 
 setEvaluationAccess (string $evaluation_access=self::EVALUATION_ACCESS_OFF)
 
 setActivationVisibility (bool $a_value)
 
 getActivationVisibility ()
 
 isActivationLimited ()
 
 setActivationLimited (bool $a_value)
 
 getIntroduction ()
 
 getOutro ()
 
 getExistingQuestions ()
 Gets the question id's of the questions which are already in the survey. More...
 
 getQuestionpoolTitles (bool $could_be_offline=false, bool $showPath=false)
 Returns the available question pools for the active user. More...
 
 moveQuestions (array $move_questions, int $target_index, int $insert_mode)
 Move questions and/or questionblocks to another position. More...
 
 removeQuestion (int $question_id)
 
 removeConstraintsConcerningQuestion (int $question_id)
 Remove constraints concerning a question with a given question_id. More...
 
 removeQuestions (array $remove_questions, array $remove_questionblocks)
 
 unfoldQuestionblocks (array $questionblocks)
 
 removeQuestionFromBlock (int $question_id, int $questionblock_id)
 
 addQuestionToBlock (int $question_id, int $questionblock_id)
 
 isQuestionInAnyBlock (int $a_question_fi)
 
 getQuestionblockQuestions (int $questionblock_id)
 
 getQuestionblockQuestionIds (int $questionblock_id)
 
 createQuestionblock (string $title, bool $show_questiontext, bool $show_blocktitle, array $questions, bool $compress_view=false)
 
 modifyQuestionblock (int $questionblock_id, string $title, bool $show_questiontext, bool $show_blocktitle, bool $compress_view=false)
 
 deleteConstraints (int $question_id)
 Deletes the constraints for a question. More...
 
 deleteConstraint (int $constraint_id)
 Deletes a single constraint. More...
 
 getSurveyQuestions (bool $with_answers=false)
 Returns the survey questions and questionblocks in an array. More...
 
 setObligatoryStates (array $obligatory_questions)
 Sets the obligatory states for questions in a survey from the questions form. More...
 
 getSurveyPages ()
 Returns the survey pages in an array (a page contains one or more questions) More...
 
 getNextPage (int $active_page_question_id, int $direction)
 Get current, previous or next page. More...
 
 getAvailableQuestionpools (bool $use_obj_id=false, bool $could_be_offline=false, bool $showPath=false, string $permission="read")
 Returns the available question pools for the active user. More...
 
 getPrecondition (int $constraint_id)
 Returns a precondition with a given id. More...
 
 getConstraints (int $question_id)
 Returns the constraints to a given question or questionblock. More...
 
 getVariables (int $question_id)
 Returns all variables (answer options/scale values) of a question. More...
 
 addConstraint (int $if_question_id, int $relation, float $value, int $conjunction)
 Adds a constraint. More...
 
 addConstraintToQuestion (int $to_question_id, int $constraint_id)
 
 updateConstraint (int $precondition_id, int $if_question_id, int $relation, float $value, int $conjunction)
 
 updateConjunctionForQuestions (array $questions, int $conjunction)
 
 getAllRelations (bool $short_as_key=false)
 
 deleteWorkingData (int $question_id, int $active_id)
 Deletes the working data of a question in the database. More...
 
 loadWorkingData (int $question_id, int $active_id)
 Gets the given answer data of a question in a run. More...
 
 finishSurvey (int $finished_id, int $appr_id=0)
 Finishes the survey creating an entry in the database. More...
 
 setPage (int $finished_id, int $page_id)
 Sets the number of the active survey page. More...
 
 sendNotificationMail (int $a_user_id, string $a_anonymize_id, int $a_appr_id=0)
 These mails are sent to tutors for each single participant that finishes a survey. More...
 
 getActiveID (int $user_id, string $anonymize_id, int $appr_id)
 Get run id. More...
 
 getLastActivePage (int $active_id)
 Returns the question id of the last active page a user visited in a survey. More...
 
 checkConstraint (array $constraint_data, ?array $working_data)
 Checks if a constraint is valid. More...
 
 getSurveyFinishedIds ()
 Get run ids. More...
 
 getUserSpecificResults (array $finished_ids)
 Calculates the evaluation data for the user specific results. More...
 
 getUserDataFromActiveId (int $active_id, bool $force_non_anonymous=false)
 Returns run information. More...
 
 getEvaluationByUser (array $questions, int $active_id)
 Calculates the evaluation data for a given run. More...
 
 getQuestionsTable (array $arrFilter)
 Retrieve data for question browser. More...
 
 getQuestionblocksTable (array $arrFilter)
 Retrieve data for question block browser. More...
 
 toXML ()
 Returns a QTI xml representation of the survey. More...
 
 locateImportFiles (string $a_dir)
 Locates the import directory and the xml file in a directory with an unzipped import file. More...
 
 importObject (array $file_info, int $svy_qpl_id)
 
 getTextblock (int $question_id)
 
 cloneTextblocks (array $mapping)
 Clones the text blocks of survey questions. More...
 
 createExportDirectory ()
 creates data directory for export files (data_dir/svy_data/svy_<id>/export) More...
 
 getExportDirectory ()
 
 createImportDirectory ()
 creates data directory for import files (data_dir/svy_data/svy_<id>/import) More...
 
 getImportDirectory ()
 get import directory of survey More...
 
 saveHeading (string $heading, int $insertbefore)
 
 isAnonymizedParticipant (string $key)
 
 getSurveyCodesForExport (?array $a_codes=null, ?array $a_ids=null)
 Return a list of survey codes for file export, note: user_key needs to be null to export a record. More...
 
 getSurveyCodesTableData (?array $ids=null, ?string $lang=null)
 Fetches the data for the survey codes table. More...
 
 isSurveyCodeUsed (string $code)
 
 isSurveyCodeUnique (string $code)
 
 importSurveyCode (string $a_anonymize_key, int $a_created, array $a_data)
 
 sendCodes (int $not_sent, string $subject, string $message, string $lang)
 
 getExternalCodeRecipients (bool $a_check_finished=false)
 
 isSurveyFinishedByCode (string $a_code)
 Get if survey is finished for a specific anonymous user code. More...
 
 deleteSurveyCode (string $survey_code)
 
 getUserAccessCode (int $user_id)
 Returns a survey access code that was saved for a registered user. More...
 
 saveUserAccessCode (int $user_id, string $access_code)
 Saves a survey access code for a registered user to the database. More...
 
 getLastAccess (int $finished_id)
 
 prepareTextareaOutput (string $txt_output)
 Prepares a string for a text area output in surveys. More...
 
 isHTML (string $a_text)
 Checks if a given string contains HTML or not. More...
 
 addMaterialTag (ilXmlWriter $a_xml_writer, string $a_material, bool $close_material_tag=true, bool $add_mobs=true, ?array $attribs=null)
 Creates an XML material tag from a plain text or xhtml text. More...
 
 canExportSurveyCode ()
 Checks if the survey code can be exported with the survey evaluation. More...
 
 setSurveyId (int $survey_id)
 
 getUserData (array $ids)
 Returns a data of all users specified by id list. More...
 
 getMailNotification ()
 Send mail to tutors each time a participant finishes the survey? More...
 
 setMailNotification (bool $a_notification)
 Activate mail to tutors each time a participant finishes the survey. More...
 
 getMailAddresses ()
 (Tutor) Recipients of "single participant has finished" mails More...
 
 setMailAddresses (string $a_addresses)
 Set (Tutor) Recipients of "single participant has finished" mails. More...
 
 getMailParticipantData ()
 Preceding text (incl. More...
 
 setMailParticipantData (string $a_data)
 Set preceding text (incl. More...
 
 getWorkingtimeForParticipant (int $finished_id)
 
 updateOrder (array $a_order)
 
 getPoolUsage ()
 
 setPoolUsage (bool $a_value)
 
 updateCode (int $a_id, string $a_email, string $a_last_name, string $a_first_name, int $a_sent)
 
 get360Mode ()
 
 set360SelfEvaluation (bool $a_value)
 
 get360SelfEvaluation ()
 
 set360SelfAppraisee (bool $a_value)
 
 get360SelfAppraisee ()
 
 set360SelfRaters (bool $a_value)
 
 get360SelfRaters ()
 
 set360Results (int $a_value)
 
 get360Results ()
 
 addAppraisee (int $a_user_id)
 
 sendAppraiseeNotification (int $a_user_id)
 
 sendAppraiseeCloseNotification (int $a_user_id)
 
 sendRaterNotification (int $a_user_id, int $a_appraisee_id)
 
 isAppraisee (int $a_user_id)
 
 isAppraiseeClosed (int $a_user_id)
 
 deleteAppraisee (int $a_user_id)
 
 getAppraiseesData ()
 
 addRater (int $a_appraisee_id, int $a_user_id, int $a_anonymous_id=0)
 
 isRater (int $a_appraisee_id, int $a_user_id, int $a_anonymous_id=0)
 
 deleteRater (int $a_appraisee_id, int $a_user_id, int $a_anonymous_id=0)
 
 getRatersData (int $a_appraisee_id)
 
 getAppraiseesToRate (?int $a_user_id, ?int $a_anonymous_id=null)
 
 getAnonymousIdByCode (string $a_code)
 
 is360SurveyStarted (int $appr_id, int $user_id, ?string $anonymous_code=null)
 
 getUserSurveyExecutionStatus (?string $a_code=null)
 Get current user execution status. More...
 
 findCodeForUser (int $a_user_id)
 
 isUnusedCode (string $a_code, int $a_user_id)
 
 getFinishedIdsForAppraiseeId (int $a_appr_id, bool $a_exclude_appraisee=false)
 
 getFinishedIdForAppraiseeIdAndRaterId (int $a_appr_id, int $a_rat_id)
 Get finished id for an appraisee and a rater. More...
 
 setSkillService (bool $a_val)
 
 getSkillService ()
 
 set360RaterSent (int $a_appraisee_id, int $a_user_id, int $a_anonymous_id, ?int $a_tstamp=null)
 
 closeAppraisee (int $a_user_id)
 
 openAllAppraisees ()
 
 getReminderStatus ()
 
 setReminderStatus (bool $a_value)
 
 getReminderStart ()
 
 setReminderStart (?ilDate $a_value=null)
 
 getReminderEnd ()
 
 setReminderEnd (?ilDate $a_value=null)
 
 getReminderFrequency ()
 
 setReminderFrequency (int $a_value)
 
 getReminderTarget ()
 
 setReminderTarget (int $a_value)
 
 getReminderLastSent ()
 
 setReminderLastSent (?string $a_value)
 
 getReminderTemplate (bool $selectDefault=false)
 
 setReminderTemplate (?int $a_value)
 
 getTutorNotificationStatus ()
 
 setTutorNotificationStatus (bool $a_value)
 Activates mail being sent to tutors after all participants have finished the survey. More...
 
 getTutorNotificationRecipients ()
 Mail being sent to tutors after all participants have finished the survey? More...
 
 setTutorNotificationRecipients (array $a_value)
 Set tutor recipients for "all participants have finished" mail. More...
 
 getTutorNotificationTarget ()
 Group that is checked for the "all participants have finished" mail Either a) all members of a parent group/course or b) all users which have been invited (svy_invitation) (= task on dashboard) More...
 
 setTutorNotificationTarget (int $a_value)
 
 getTutorResultsStatus ()
 
 setTutorResultsStatus (bool $a_value)
 
 getTutorResultsRecipients ()
 
 setTutorResultsRecipients (array $a_value)
 
 sent360Reminders ()
 Send 360 reminders. More...
 
 send360ReminderToUser (int $a_user_id, array $a_appraisee_ids)
 
 getNotificationTargetUserIds (bool $a_use_invited)
 These users must finish the survey to trigger the tutor notification "all users finished the survey" a) members of a parent group/course or b) all members that have been invited (svy_invitation) invitations are presented as tasks on the dashboard. More...
 
 checkReminder ()
 
 setActivationStartDate (?int $starting_time=null)
 
 setActivationEndDate (?int $ending_time=null)
 
 getActivationStartDate ()
 
 getActivationEndDate ()
 
 setViewOwnResults (bool $a_value)
 
 hasViewOwnResults ()
 
 setMailOwnResults (bool $a_value)
 
 hasMailOwnResults ()
 
 setMailConfirmation (bool $a_value)
 
 hasMailConfirmation ()
 
 setAnonymousUserList (bool $a_value)
 
 hasAnonymousUserList ()
 
 getReminderMailTemplates (?int &$defaultTemplateId=null)
 
 setMode (int $a_value)
 
 getMode ()
 
 setSelfEvaluationResults (int $a_value)
 
 getSelfEvaluationResults ()
 
 getMaxSumScore ()
 
- 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 _getQuestionblock (int $questionblock_id)
 get question block properties More...
 
static _addQuestionblock (string $title="", int $owner=0, bool $show_questiontext=true, bool $show_blocktitle=false, bool $compress_view=false)
 
static _getConstraints (int $survey_id)
 
static _hasDatasets (int $survey_id)
 
static _instanciateQuestion (int $question_id)
 Creates an instance of a question with a given question id. More...
 
static getSurveySkippedValue ()
 
static getSurveysWithTutorResults ()
 
- 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)
 

Data Fields

const EVALUATION_ACCESS_OFF = "0"
 
const EVALUATION_ACCESS_ALL = "1"
 
const EVALUATION_ACCESS_PARTICIPANTS = "2"
 
const ANONYMIZE_OFF = 0
 
const ANONYMIZE_ON = 1
 
const ANONYMIZE_FREEACCESS = 2
 
const ANONYMIZE_CODE_ALL = 3
 
const QUESTIONTITLES_HIDDEN = 0
 
const QUESTIONTITLES_VISIBLE = 1
 
const PRINT_HIDE_LABELS = 1
 
const PRINT_SHOW_LABELS = 3
 
const MODE_STANDARD = 0
 
const MODE_360 = 1
 
const MODE_SELF_EVAL = 2
 
const MODE_IND_FEEDB = 3
 
const RESULTS_SELF_EVAL_NONE = 0
 
const RESULTS_SELF_EVAL_OWN = 1
 
const RESULTS_SELF_EVAL_ALL = 2
 
const RESULTS_360_NONE = 0
 
const RESULTS_360_OWN = 1
 
const RESULTS_360_ALL = 2
 
const NOTIFICATION_PARENT_COURSE = 1
 
const NOTIFICATION_INVITED_USERS = 2
 
const NOTIFICATION_APPRAISEES = 3
 
const NOTIFICATION_RATERS = 4
 
const NOTIFICATION_APPRAISEES_AND_RATERS = 5
 
int $survey_id = 0
 A unique positive numerical ID which identifies the survey. More...
 
string $author = ""
 A text representation of the authors name. More...
 
string $introduction = ""
 
string $outro = ""
 
string $evaluation_access = self::EVALUATION_ACCESS_OFF
 
string $start_date = ""
 
string $end_date = ""
 
array $questions = []
 
int $anonymize = 0
 
int $display_question_titles = 0
 
bool $surveyCodeSecurity = false
 
bool $mailnotification = false
 
string $mailaddresses = ""
 
string $mailparticipantdata = ""
 
bool $pool_usage = false
 
- 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 Member Functions

 initServices ()
 
 doCreateMetaData ()
 
 getParticipantTextResults (int $active_id)
 
 checkTutorNotification ()
 Check, if mail to tutors after all participants have finished the survey should be sent. More...
 
 sendTutorNotification ()
 Send mail to tutors after all participants have finished the survey. More...
 
 sentReminderPlaceholders (string $a_message, int $a_user_id, array $a_context_params)
 
- Protected Member Functions inherited from ilObject
 doMDUpdateListener (string $a_element)
 
 beforeMDUpdateListener (string $a_element)
 
 doCreateMetaData ()
 
 beforeCreateMetaData ()
 
 doUpdateMetaData ()
 
 beforeUpdateMetaData ()
 
 doDeleteMetaData ()
 
 beforeDeleteMetaData ()
 
 handleAutoRating ()
 
 hasAutoRating ()
 

Protected Attributes

InternalDomainService $domain
 
ilLogger $svy_log
 
bool $activation_limited = false
 
ilObjUser $user
 
ilAccessHandler $access
 
ilPluginAdmin $plugin_admin
 
bool $calculate_sum_score = false
 
bool $activation_visibility = false
 
int $activation_starting_time = null
 
int $activation_ending_time = null
 
bool $mode_360_self_eval = false
 
bool $mode_360_self_appr = false
 
bool $mode_360_self_rate = false
 
int $mode_360_results = 0
 
bool $mode_skill_service = false
 
bool $reminder_status = false
 
ilDate $reminder_start = null
 
ilDate $reminder_end = null
 
int $reminder_frequency = 0
 
int $reminder_target = 0
 
string $reminder_last_sent = null
 
int $reminder_tmpl = null
 
bool $tutor_ntf_status = false
 
array $tutor_ntf_recipients = []
 
int $tutor_ntf_target = 0
 
bool $tutor_res_status = false
 
array $tutor_res_recipients = []
 
bool $view_own_results = false
 
bool $mail_own_results = false
 
bool $mail_confirmation = false
 
bool $anon_user_list = false
 
int $mode = 0
 
int $mode_self_eval_results = 0
 
Participants InvitationsManager $invitation_manager
 
ILIAS Survey InternalService $survey_service
 
ILIAS Survey Code CodeManager $code_manager
 
ILIAS Survey InternalDataService $data_manager
 
Mode FeatureConfig $feature_config
 
ILIAS SurveyQuestionPool Export ImportManager $import_manager
 
ilMailTemplatePlaceholderResolver $placeholder_resolver
 
- 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

Constructor & Destructor Documentation

◆ __construct()

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

Definition at line 145 of file class.ilObjSurvey.php.

148 {
149 global $DIC;
150
151 $this->survey_service = $DIC->survey()->internal();
152
153 $this->user = $DIC->user();
154 $this->lng = $DIC->language();
155 $this->db = $DIC->database();
156 $this->access = $DIC->access();
157 $this->plugin_admin = $DIC["ilPluginAdmin"];
158 $this->tree = $DIC->repositoryTree();
159 $ilUser = $DIC->user();
160 $lng = $DIC->language();
161
162 $this->type = "svy";
163 $this->survey_id = -1;
164 $this->introduction = "";
165 $this->outro = $lng->txt("survey_finished");
166 $this->author = $ilUser->getFullname();
167 $this->evaluation_access = self::EVALUATION_ACCESS_OFF;
168 $this->questions = array();
169 $this->anonymize = self::ANONYMIZE_OFF;
170 $this->display_question_titles = self::QUESTIONTITLES_VISIBLE;
171 $this->surveyCodeSecurity = true;
172 $this->pool_usage = true;
173 $this->mode = self::MODE_STANDARD;
174 $this->mode_self_eval_results = self::RESULTS_SELF_EVAL_OWN;
175
176 $this->invitation_manager = $this
177 ->survey_service
178 ->domain()
179 ->participants()
180 ->invitations();
181
182 $this->import_manager = $DIC->surveyQuestionPool()
183 ->internal()
184 ->domain()
185 ->import();
186 $this->placeholder_resolver = $DIC->mail()->placeholderResolver();
187
188 parent::__construct($a_id, $a_call_by_reference);
189 $this->svy_log = ilLoggerFactory::getLogger("svy");
190 $this->initServices();
191 $this->domain = $DIC->survey()->internal()->domain();
192 }
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 getLogger(string $a_component_id)
Get component logger.
const QUESTIONTITLES_VISIBLE
const EVALUATION_ACCESS_OFF
const RESULTS_SELF_EVAL_OWN
ilLanguage $lng
__construct(Container $dic, ilPlugin $plugin)
@inheritDoc
global $DIC
Definition: shib_login.php:26

References $DIC, ilObject\$lng, ILIAS\GlobalScreen\Provider\__construct(), ILIAS\Repository\access(), ANONYMIZE_OFF, EVALUATION_ACCESS_OFF, ilLoggerFactory\getLogger(), initServices(), ILIAS\Repository\lng(), MODE_STANDARD, QUESTIONTITLES_VISIBLE, RESULTS_SELF_EVAL_OWN, ilLanguage\txt(), and ILIAS\Repository\user().

+ Here is the call graph for this function:

Member Function Documentation

◆ _addQuestionblock()

static ilObjSurvey::_addQuestionblock ( string  $title = "",
int  $owner = 0,
bool  $show_questiontext = true,
bool  $show_blocktitle = false,
bool  $compress_view = false 
)
static
Todo:
move to survey question manager/repo

Definition at line 1674 of file class.ilObjSurvey.php.

1680 : int {
1681 global $DIC;
1682
1683 $ilDB = $DIC->database();
1684 $next_id = $ilDB->nextId('svy_qblk');
1685 $ilDB->manipulateF(
1686 "INSERT INTO svy_qblk (questionblock_id, title, show_questiontext," .
1687 " show_blocktitle, owner_fi, tstamp, compress_view) " .
1688 "VALUES (%s, %s, %s, %s, %s, %s, %s)",
1689 array('integer','text','integer','integer','integer','integer','integer'),
1690 array($next_id, $title, $show_questiontext, $show_blocktitle, $owner, time(),$compress_view)
1691 );
1692 return $next_id;
1693 }
string $title

◆ _getConstraints()

static ilObjSurvey::_getConstraints ( int  $survey_id)
static
Todo:
move to constraint manager/repo, use dto

Definition at line 2100 of file class.ilObjSurvey.php.

2102 : array {
2103 global $DIC;
2104
2105 $ilDB = $DIC->database();
2106 $result_array = array();
2107 $result = $ilDB->queryF(
2108 "SELECT svy_qst_constraint.question_fi as for_question, svy_constraint.*, svy_relation.* " .
2109 "FROM svy_qst_constraint, svy_constraint, svy_relation WHERE svy_constraint.relation_fi = svy_relation.relation_id " .
2110 "AND svy_qst_constraint.constraint_fi = svy_constraint.constraint_id AND svy_qst_constraint.survey_fi = %s",
2111 array('integer'),
2112 array($survey_id)
2113 );
2114 while ($row = $ilDB->fetchAssoc($result)) {
2115 $result_array[] = array("id" => $row["constraint_id"],
2116 "for_question" => $row["for_question"],
2117 "question" => $row["question_fi"],
2118 "short" => $row["shortname"],
2119 "long" => $row["longname"],
2120 "relation_id" => $row["relation_id"],
2121 "value" => $row["value"],
2122 'conjunction' => $row['conjunction']
2123 );
2124 }
2125 return $result_array;
2126 }
int $survey_id
A unique positive numerical ID which identifies the survey.

◆ _getQuestionblock()

static ilObjSurvey::_getQuestionblock ( int  $questionblock_id)
static

get question block properties

Todo:
move to survey question manager/repo

Definition at line 1656 of file class.ilObjSurvey.php.

1658 : array {
1659 global $DIC;
1660
1661 $ilDB = $DIC->database();
1662 $result = $ilDB->queryF(
1663 "SELECT * FROM svy_qblk WHERE questionblock_id = %s",
1664 array('integer'),
1665 array($questionblock_id)
1666 );
1667 $row = $ilDB->fetchAssoc($result);
1668 return $row;
1669 }

◆ _hasDatasets()

static ilObjSurvey::_hasDatasets ( int  $survey_id)
static
Todo:
move to run manager

Definition at line 2636 of file class.ilObjSurvey.php.

2638 : bool {
2639 global $DIC;
2640
2641 $ilDB = $DIC->database();
2642
2643 $result = $ilDB->queryF(
2644 "SELECT finished_id FROM svy_finished WHERE survey_fi = %s",
2645 array('integer'),
2646 array($survey_id)
2647 );
2648 return (bool) $result->numRows();
2649 }

Referenced by ilSurveyConstraintsGUI\constraintsObject(), ilSurveySyncTableGUI\importData(), and ilSurveyEditorGUI\questionsObject().

+ Here is the caller graph for this function:

◆ _instanciateQuestion()

static ilObjSurvey::_instanciateQuestion ( int  $question_id)
static

Creates an instance of a question with a given question id.

Todo:
move to factory in pool module

Definition at line 3094 of file class.ilObjSurvey.php.

3096 : ?SurveyQuestion {
3097 if ($question_id < 1) {
3098 return null;
3099 }
3100 $question_type = SurveyQuestion::_getQuestionType($question_id);
3101 if ($question_type === '') {
3102 return null;
3103 }
3104 SurveyQuestion::_includeClass($question_type);
3105 $question = new $question_type();
3106 $question->loadFromDb($question_id);
3107 return $question;
3108 }
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
static _includeClass(string $question_type, int $gui=0)
Include the php class file for a given question type.
static _getQuestionType(int $question_id)
Returns the question type of a question with a given id.

Referenced by ilSurveyEditorGUI\copyPasteObject(), ilSurveyEditorGUI\copyQuestionsToPoolObject(), and ilSurveyEditorGUI\executeCopyQuestionsToPoolObject().

+ Here is the caller graph for this function:

◆ addAppraisee()

ilObjSurvey::addAppraisee ( int  $a_user_id)
Todo:
move to appraisal manager

Definition at line 4277 of file class.ilObjSurvey.php.

4279 : void {
4280 global $DIC;
4281
4282 $ilDB = $DIC->database();
4283 $access = $DIC->access();
4284
4285 if (!$this->isAppraisee($a_user_id) &&
4286 $a_user_id !== ANONYMOUS_USER_ID) {
4287 $fields = array(
4288 "obj_id" => array("integer", $this->getSurveyId()),
4289 "user_id" => array("integer", $a_user_id)
4290 );
4291 $ilDB->insert("svy_360_appr", $fields);
4292
4293 // send notification and add to desktop
4294 if ($access->checkAccessOfUser($a_user_id, "read", "", $this->getRefId())) {
4295 $this->sendAppraiseeNotification($a_user_id);
4296 }
4297 }
4298 }
ilAccessHandler $access
sendAppraiseeNotification(int $a_user_id)
isAppraisee(int $a_user_id)
const ANONYMOUS_USER_ID
Definition: constants.php:27
checkAccessOfUser(int $a_user_id, string $a_permission, string $a_cmd, int $a_ref_id, string $a_type="", ?int $a_obj_id=null, ?int $a_tree_id=null)
check access for an object (provide $a_type and $a_obj_id if available for better performance)

References $ilDB, and ilRBACAccessHandler\checkAccessOfUser().

+ Here is the call graph for this function:

◆ addConstraint()

ilObjSurvey::addConstraint ( int  $if_question_id,
int  $relation,
float  $value,
int  $conjunction 
)

Adds a constraint.

Parameters
int$if_question_idquestion id of the question which defines a precondition
int$relationrelation id
float$valuevalue compared with the relation
int$conjunction
Returns
?int
Todo:
move to constraint manager/repo

Definition at line 2161 of file class.ilObjSurvey.php.

2166 : ?int {
2167 $ilDB = $this->db;
2168
2169 $next_id = $ilDB->nextId('svy_constraint');
2170 $affectedRows = $ilDB->manipulateF(
2171 "INSERT INTO svy_constraint (constraint_id, question_fi, relation_fi, value, conjunction) VALUES " .
2172 "(%s, %s, %s, %s, %s)",
2173 array('integer','integer','integer','float', 'integer'),
2174 array($next_id, $if_question_id, $relation, $value, $conjunction)
2175 );
2176 if ($affectedRows) {
2177 return $next_id;
2178 } else {
2179 return null;
2180 }
2181 }
$relation
ilDBInterface $db

◆ addConstraintToQuestion()

ilObjSurvey::addConstraintToQuestion ( int  $to_question_id,
int  $constraint_id 
)
Todo:
move to constraint manager/repo

Definition at line 2187 of file class.ilObjSurvey.php.

2190 : void {
2191 $ilDB = $this->db;
2192
2193 $next_id = $ilDB->nextId('svy_qst_constraint');
2194 $ilDB->manipulateF(
2195 "INSERT INTO svy_qst_constraint (question_constraint_id, survey_fi, question_fi, " .
2196 "constraint_fi) VALUES (%s, %s, %s, %s)",
2197 array('integer','integer','integer','integer'),
2198 array($next_id, $this->getSurveyId(), $to_question_id, $constraint_id)
2199 );
2200 }

◆ addMaterialTag()

ilObjSurvey::addMaterialTag ( ilXmlWriter  $a_xml_writer,
string  $a_material,
bool  $close_material_tag = true,
bool  $add_mobs = true,
?array  $attribs = null 
)

Creates an XML material tag from a plain text or xhtml text.

Todo:
move to export sub-service

Definition at line 4011 of file class.ilObjSurvey.php.

4017 : void {
4018 $a_xml_writer->xmlStartTag("material", $attribs);
4019 $attrs = array(
4020 "type" => "text/plain"
4021 );
4022 if ($this->isHTML($a_material)) {
4023 $attrs["type"] = "text/xhtml";
4024 }
4025 $mattext = ilRTE::_replaceMediaObjectImageSrc($a_material, 0);
4026 $a_xml_writer->xmlElement("mattext", $attrs, $mattext);
4027
4028 if ($add_mobs) {
4029 $mobs = ilObjMediaObject::_getMobsOfObject("svy:html", $this->getId());
4030 foreach ($mobs as $mob) {
4031 $mob_id = "il_" . IL_INST_ID . "_mob_" . $mob;
4032 if (strpos($mattext, $mob_id) !== false) {
4033 $mob_obj = new ilObjMediaObject($mob);
4034 $imgattrs = array(
4035 "label" => $mob_id,
4036 "uri" => "objects/" . "il_" . IL_INST_ID . "_mob_" . $mob . "/" . $mob_obj->getTitle(),
4037 "type" => "svy:html",
4038 "id" => $this->getId()
4039 );
4040 $a_xml_writer->xmlElement("matimage", $imgattrs, null);
4041 }
4042 }
4043 }
4044 if ($close_material_tag) {
4045 $a_xml_writer->xmlEndTag("material");
4046 }
4047 }
static _getMobsOfObject(string $a_type, int $a_id, int $a_usage_hist_nr=0, string $a_lang="-")
isHTML(string $a_text)
Checks if a given string contains HTML or not.
static _replaceMediaObjectImageSrc(string $a_text, int $a_direction=0, string $nic='')
Replaces image source from mob image urls with the mob id or replaces mob id with the correct image s...
xmlElement(string $tag, $attrs=null, $data=null, $encode=true, $escape=true)
Writes a basic element (no children, just textual content)
xmlEndTag(string $tag)
Writes an endtag.
xmlStartTag(string $tag, ?array $attrs=null, bool $empty=false, bool $encode=true, bool $escape=true)
Writes a starttag.
const IL_INST_ID
Definition: constants.php:40

◆ addQuestion()

ilObjSurvey::addQuestion ( int  $question_id)

Adds a question to the survey (used in importer!)

Definition at line 260 of file class.ilObjSurvey.php.

260 : void
261 {
262 $this->questions[] = $question_id;
263 }

◆ addQuestionToBlock()

ilObjSurvey::addQuestionToBlock ( int  $question_id,
int  $questionblock_id 
)
Todo:
move to survey question manager/repo

Definition at line 1547 of file class.ilObjSurvey.php.

1550 : void {
1551 $ilDB = $this->db;
1552
1553 // see #22018
1554 if (!$this->isQuestionInAnyBlock($question_id)) {
1555 $next_id = $ilDB->nextId('svy_qblk_qst');
1556 $affectedRows = $ilDB->manipulateF(
1557 "INSERT INTO svy_qblk_qst (qblk_qst_id, survey_fi, questionblock_fi, " .
1558 "question_fi) VALUES (%s, %s, %s, %s)",
1559 array('integer', 'integer', 'integer', 'integer'),
1560 array($next_id, $this->getSurveyId(), $questionblock_id, $question_id)
1561 );
1562
1563 $this->deleteConstraints($question_id); // #13713
1564 }
1565 }
isQuestionInAnyBlock(int $a_question_fi)
deleteConstraints(int $question_id)
Deletes the constraints for a question.

References $ilDB.

◆ addRater()

ilObjSurvey::addRater ( int  $a_appraisee_id,
int  $a_user_id,
int  $a_anonymous_id = 0 
)
Todo:
move to appraisal manager

Definition at line 4478 of file class.ilObjSurvey.php.

4482 : void {
4483 global $DIC;
4484
4485 $ilDB = $DIC->database();
4486 $access = $DIC->access();
4487
4488 if ($this->isAppraisee($a_appraisee_id) &&
4489 !$this->isRater($a_appraisee_id, $a_user_id, $a_anonymous_id)) {
4490 $fields = array(
4491 "obj_id" => array("integer", $this->getSurveyId()),
4492 "appr_id" => array("integer", $a_appraisee_id),
4493 "user_id" => array("integer", $a_user_id),
4494 "anonymous_id" => array("integer", $a_anonymous_id)
4495 );
4496 $ilDB->insert("svy_360_rater", $fields);
4497
4498 // send notification and add to desktop
4499 if ($access->checkAccessOfUser($a_user_id, "read", "", $this->getRefId())) {
4500 // out-commented, since adding raters will end in a mail
4501 // form to send the mail "manually"
4502 // otherwise two mails would be sent (tested in individual feedback)
4503 //$this->sendRaterNotification($a_user_id, $a_appraisee_id);
4504 }
4505 }
4506 }
isRater(int $a_appraisee_id, int $a_user_id, int $a_anonymous_id=0)

References $ilDB, and ilRBACAccessHandler\checkAccessOfUser().

+ Here is the call graph for this function:

◆ canExportSurveyCode()

ilObjSurvey::canExportSurveyCode ( )

Checks if the survey code can be exported with the survey evaluation.

In some cases this may be necessary but usually you should prevent it because people who sent the survey codes could connect real people with the survey code in the evaluation and undermine the anonymity

Returns
bool true if the survey is anonymized and the survey code may be shown in the export file
Todo:
move to code manager

Definition at line 4056 of file class.ilObjSurvey.php.

4056 : bool
4057 {
4058 if ($this->getAnonymize() !== self::ANONYMIZE_OFF) {
4059 if ($this->surveyCodeSecurity === false) {
4060 return true;
4061 }
4062 }
4063 return false;
4064 }

◆ checkConstraint()

ilObjSurvey::checkConstraint ( array  $constraint_data,
?array  $working_data 
)

Checks if a constraint is valid.

Parameters
array$constraint_dataconstraint data
?array$working_data user input of the related question
Returns
bool true if the constraint is valid, otherwise false
Todo:
move to run/constraint manager

Definition at line 2574 of file class.ilObjSurvey.php.

2577 : bool {
2578 if (!is_array($working_data) || count($working_data) === 0) {
2579 return 0;
2580 }
2581
2582 if ((count($working_data) === 1) and (strcmp($working_data[0]["value"], "") === 0)) {
2583 return 0;
2584 }
2585
2586 $found = false;
2587 foreach ($working_data as $data) {
2588 switch ($constraint_data["short"]) {
2589 case "<":
2590 if ($data["value"] < $constraint_data["value"]) {
2591 $found = true;
2592 }
2593 break;
2594
2595 case "<=":
2596 if ($data["value"] <= $constraint_data["value"]) {
2597 $found = true;
2598 }
2599 break;
2600
2601 case "=":
2602 if ($data["value"] == $constraint_data["value"]) {
2603 $found = true;
2604 }
2605 break;
2606
2607 case "<>":
2608 if ($data["value"] <> $constraint_data["value"]) {
2609 $found = true;
2610 }
2611 break;
2612
2613 case ">=":
2614 if ($data["value"] >= $constraint_data["value"]) {
2615 $found = true;
2616 }
2617 break;
2618
2619 case ">":
2620 if ($data["value"] > $constraint_data["value"]) {
2621 $found = true;
2622 }
2623 break;
2624 }
2625 if ($found) {
2626 break;
2627 }
2628 }
2629
2630 return (int) $found;
2631 }

◆ checkReminder()

ilObjSurvey::checkReminder ( )

Definition at line 5316 of file class.ilObjSurvey.php.

5316 : ?int
5317 {
5318 $ilDB = $this->db;
5319 $ilAccess = $this->access;
5320
5321 $now = time();
5322 $now_with_format = date("YmdHis", $now);
5323 $today = date("Y-m-d");
5324
5325 $this->svy_log->debug("Check status and dates.");
5326
5327 // object settings / participation period
5328 if (
5329 $this->getOfflineStatus() ||
5330 !$this->getReminderStatus() ||
5331 ($this->getStartDate() && $now_with_format < $this->getStartDate()) ||
5332 ($this->getEndDate() && $now_with_format > $this->getEndDate())) {
5333 return null;
5334 }
5335
5336 // reminder period
5337 $start = $this->getReminderStart();
5338 if ($start) {
5339 $start = $start->get(IL_CAL_DATE);
5340 }
5341 $end = $this->getReminderEnd();
5342 if ($end) {
5343 $end = $end->get(IL_CAL_DATE);
5344 }
5345 if ($today < $start ||
5346 ($end && $today > $end)) {
5347 return null;
5348 }
5349
5350 $this->svy_log->debug("Check access period.");
5351
5352 // object access period
5353 $item_data = ilObjectActivation::getItem($this->getRefId());
5354 if ((int) $item_data["timing_type"] === ilObjectActivation::TIMINGS_ACTIVATION &&
5355 ($now < $item_data["timing_start"] ||
5356 $now > $item_data["timing_end"])) {
5357 return null;
5358 }
5359
5360 $this->svy_log->debug("Check frequency.");
5361
5362 // check frequency
5363 $cut = new ilDate($today, IL_CAL_DATE);
5364 $cut->increment(IL_CAL_DAY, $this->getReminderFrequency() * -1);
5365 if (!$this->getReminderLastSent() ||
5366 $cut->get(IL_CAL_DATE) >= substr($this->getReminderLastSent(), 0, 10)) {
5367 $missing_ids = array();
5368 if (!$this->feature_config->usesAppraisees()) {
5369 $this->svy_log->debug("Entering survey mode.");
5370
5371 // #16871
5372 $user_ids = $this->getNotificationTargetUserIds(($this->getReminderTarget() === self::NOTIFICATION_INVITED_USERS));
5373 if ($user_ids) {
5374 // gather participants who already finished
5375 $finished_ids = array();
5376 $set = $ilDB->query("SELECT user_fi FROM svy_finished" .
5377 " WHERE survey_fi = " . $ilDB->quote($this->getSurveyId(), "integer") .
5378 " AND state = " . $ilDB->quote(1, "text") .
5379 " AND " . $ilDB->in("user_fi", $user_ids, "", "integer"));
5380 while ($row = $ilDB->fetchAssoc($set)) {
5381 $finished_ids[] = $row["user_fi"];
5382 }
5383
5384 // some users missing out?
5385 $missing_ids = array_diff($user_ids, $finished_ids);
5386 if ($missing_ids) {
5387 foreach ($missing_ids as $idx => $user_id) {
5388 // should be able to participate
5389 if (!$ilAccess->checkAccessOfUser($user_id, "read", "", $this->getRefId(), "svy", $this->getId())) {
5390 unset($missing_ids[$idx]);
5391 }
5392 }
5393 }
5394 if ($missing_ids) {
5395 $this->sentReminder($missing_ids);
5396 }
5397 }
5398 } else {
5399 $this->svy_log->debug("Entering 360 mode.");
5400
5401 $this->sent360Reminders();
5402 }
5403
5404
5405 $this->setReminderLastSent($today);
5406 $this->saveToDb();
5407
5408 return count($missing_ids);
5409 }
5410
5411 return null;
5412 }
const IL_CAL_DATE
const IL_CAL_DAY
Class for single dates.
setReminderLastSent(?string $a_value)
getNotificationTargetUserIds(bool $a_use_invited)
These users must finish the survey to trigger the tutor notification "all users finished the survey" ...
sent360Reminders()
Send 360 reminders.
static getItem(int $ref_id)

References $ilDB, $user_id, ilObjectActivation\getItem(), IL_CAL_DATE, IL_CAL_DAY, and ilObjectActivation\TIMINGS_ACTIVATION.

+ Here is the call graph for this function:

◆ checkTutorNotification()

ilObjSurvey::checkTutorNotification ( )
protected

Check, if mail to tutors after all participants have finished the survey should be sent.

Definition at line 5124 of file class.ilObjSurvey.php.

5124 : void
5125 {
5126 $ilDB = $this->db;
5127
5128 if ($this->getTutorNotificationStatus()) {
5129 // get target users, either parent course/group members or
5130 // user with the survey on the dashboard
5131 $user_ids = $this->getNotificationTargetUserIds(($this->getTutorNotificationTarget() === self::NOTIFICATION_INVITED_USERS));
5132 if ($user_ids) {
5133 $set = $ilDB->query("SELECT COUNT(*) numall FROM svy_finished" .
5134 " WHERE survey_fi = " . $ilDB->quote($this->getSurveyId(), "integer") .
5135 " AND state = " . $ilDB->quote(1, "integer") .
5136 " AND " . $ilDB->in("user_fi", $user_ids, "", "integer"));
5137 $row = $ilDB->fetchAssoc($set);
5138
5139 // all users finished the survey -> send notifications
5140 if ((int) $row["numall"] === count($user_ids)) {
5141 $this->sendTutorNotification();
5142 }
5143 }
5144 }
5145 }
getTutorNotificationTarget()
Group that is checked for the "all participants have finished" mail Either a) all members of a parent...
sendTutorNotification()
Send mail to tutors after all participants have finished the survey.

References $ilDB.

◆ cloneTextblocks()

ilObjSurvey::cloneTextblocks ( array  $mapping)

Clones the text blocks of survey questions.

Todo:
move to survey question manager
Parameters
array<int,int>$mapping (key is original, value is new id)

Definition at line 3430 of file class.ilObjSurvey.php.

3432 : void {
3433 foreach ($mapping as $original_id => $new_id) {
3434 $textblock = $this->getTextblock($original_id);
3435 $this->saveHeading(ilUtil::stripSlashes($textblock, true, ilRTESettings::_getUsedHTMLTagsAsString("survey")), $new_id);
3436 }
3437 }
getTextblock(int $question_id)
saveHeading(string $heading, int $insertbefore)
static _getUsedHTMLTagsAsString(string $module='')
static stripSlashes(string $a_str, bool $a_strip_html=true, string $a_allow="")

References ilRTESettings\_getUsedHTMLTagsAsString(), and ilUtil\stripSlashes().

+ Here is the call graph for this function:

◆ closeAppraisee()

ilObjSurvey::closeAppraisee ( int  $a_user_id)
Todo:
move to appraisal/run manager/mode

Definition at line 4885 of file class.ilObjSurvey.php.

4887 : void {
4888 global $DIC;
4889
4890 $ilDB = $DIC->database();
4891 $user = $DIC->user();
4892
4893 // close the appraisee
4894 $ilDB->manipulate("UPDATE svy_360_appr" .
4895 " SET has_closed = " . $ilDB->quote(time(), "integer") .
4896 " WHERE obj_id = " . $ilDB->quote($this->getSurveyId(), "integer") .
4897 " AND user_id = " . $ilDB->quote($a_user_id, "integer"));
4898
4899 // write competences
4900 $skmg_set = new ilSkillManagementSettings();
4901 if ($this->getSkillService() && $skmg_set->isActivated()) {
4902 $sskill = new ilSurveySkill($this);
4903 $sskill->writeAndAddAppraiseeSkills($a_user_id);
4904 }
4905
4906 // send notification
4907 if ($user->getId() !== $a_user_id) {
4908 $this->sendAppraiseeCloseNotification($a_user_id);
4909 }
4910 }
sendAppraiseeCloseNotification(int $a_user_id)
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...

◆ create()

ilObjSurvey::create (   $a_upload = false)

Definition at line 212 of file class.ilObjSurvey.php.

212 : int
213 {
214 $id = parent::create();
215 if (!$a_upload) {
216 $this->createMetaData();
217 }
218 $this->setOfflineStatus(true);
219 $this->update($a_upload);
220 return $id;
221 }
$id
plugin.php for ilComponentBuildPluginInfoObjectiveTest::testAddPlugins
Definition: plugin.php:23
setOfflineStatus(bool $status)

References $id, ilObject\createMetaData(), ilObject\setOfflineStatus(), and ilObject\update().

+ Here is the call graph for this function:

◆ createExportDirectory()

ilObjSurvey::createExportDirectory ( )

creates data directory for export files (data_dir/svy_data/svy_<id>/export)

Todo:
move to export sub-service
Exceptions
ilSurveyException

Definition at line 3445 of file class.ilObjSurvey.php.

3445 : void
3446 {
3447 $svy_data_dir = ilFileUtils::getDataDir() . "/svy_data";
3448 ilFileUtils::makeDir($svy_data_dir);
3449 if (!is_writable($svy_data_dir)) {
3450 throw new ilSurveyException("Survey Data Directory (" . $svy_data_dir . ") not writeable.");
3451 }
3452
3453 // create learning module directory (data_dir/lm_data/lm_<id>)
3454 $svy_dir = $svy_data_dir . "/svy_" . $this->getId();
3455 ilFileUtils::makeDir($svy_dir);
3456 if (!is_dir($svy_dir)) {
3457 throw new ilSurveyException("Creation of Survey Directory failed.");
3458 }
3459 // create Export subdirectory (data_dir/lm_data/lm_<id>/Export)
3460 $export_dir = $svy_dir . "/export";
3461 ilFileUtils::makeDir($export_dir);
3462 if (!is_dir($export_dir)) {
3463 throw new ilSurveyException("Creation of Export Directory failed.");
3464 }
3465 }
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)
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...

References ilFileUtils\getDataDir(), ILIAS\Survey\Mode\getId(), and ilFileUtils\makeDir().

+ Here is the call graph for this function:

◆ createImportDirectory()

ilObjSurvey::createImportDirectory ( )

creates data directory for import files (data_dir/svy_data/svy_<id>/import)

Todo:
move to export sub-service
Exceptions
ilSurveyException

Definition at line 3483 of file class.ilObjSurvey.php.

3483 : void
3484 {
3485 $svy_data_dir = ilFileUtils::getDataDir() . "/svy_data";
3486 ilFileUtils::makeDir($svy_data_dir);
3487
3488 if (!is_writable($svy_data_dir)) {
3489 throw new ilSurveyException("Survey Data Directory (" . $svy_data_dir . ") not writeable.");
3490 }
3491
3492 // create test directory (data_dir/svy_data/svy_<id>)
3493 $svy_dir = $svy_data_dir . "/svy_" . $this->getId();
3494 ilFileUtils::makeDir($svy_dir);
3495 if (!is_dir($svy_dir)) {
3496 throw new ilSurveyException("Creation of Survey Directory failed.");
3497 }
3498
3499 // create import subdirectory (data_dir/svy_data/svy_<id>/import)
3500 $import_dir = $svy_dir . "/import";
3501 ilFileUtils::makeDir($import_dir);
3502 if (!is_dir($import_dir)) {
3503 throw new ilSurveyException("Creation of Import Directory failed.");
3504 }
3505 }

References ilFileUtils\getDataDir(), ILIAS\Survey\Mode\getId(), and ilFileUtils\makeDir().

+ Here is the call graph for this function:

◆ createQuestionblock()

ilObjSurvey::createQuestionblock ( string  $title,
bool  $show_questiontext,
bool  $show_blocktitle,
array  $questions,
bool  $compress_view = false 
)
Parameters
int[]$questionsarray with question ids

Definition at line 1698 of file class.ilObjSurvey.php.

1704 : void {
1705 $ilDB = $this->db;
1706
1707 // if the selected questions are not in a continous selection, move all questions of the
1708 // questionblock at the position of the first selected question
1709 $this->moveQuestions($questions, $questions[0], 0);
1710
1711 // now save the question block
1712 $ilUser = $this->user;
1713 $next_id = $ilDB->nextId('svy_qblk');
1714 $affectedRows = $ilDB->manipulateF(
1715 "INSERT INTO svy_qblk (questionblock_id, title, show_questiontext," .
1716 " show_blocktitle, owner_fi, tstamp, compress_view) VALUES (%s, %s, %s, %s, %s, %s, %s)",
1717 array('integer','text','text','text','integer','integer','integer'),
1718 array($next_id, $title, $show_questiontext, $show_blocktitle, $ilUser->getId(), time(), $compress_view)
1719 );
1720 if ($affectedRows) {
1721 $questionblock_id = $next_id;
1722 foreach ($questions as $index) {
1723 if (!$this->isQuestionInAnyBlock($index)) {
1724 $next_id = $ilDB->nextId('svy_qblk_qst'); // #22018
1725 $affectedRows = $ilDB->manipulateF(
1726 "INSERT INTO svy_qblk_qst (qblk_qst_id, survey_fi, questionblock_fi, " .
1727 "question_fi) VALUES (%s, %s, %s, %s)",
1728 array('integer', 'integer', 'integer', 'integer'),
1729 array($next_id, $this->getSurveyId(), $questionblock_id, $index)
1730 );
1731 $this->deleteConstraints($index);
1732 }
1733 }
1734 }
1735 }
moveQuestions(array $move_questions, int $target_index, int $insert_mode)
Move questions and/or questionblocks to another position.

◆ createReference()

ilObjSurvey::createReference ( )

creates reference for object

Reimplemented from ilObject.

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

243 : int
244 {
245 $result = parent::createReference();
246 $this->saveToDb();
247 return $result;
248 }

References saveToDb().

+ Here is the call graph for this function:

◆ delete()

ilObjSurvey::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!!

Returns
bool true if object was removed completely; false if only a references was removed

Reimplemented from ilObject.

Definition at line 265 of file class.ilObjSurvey.php.

265 : bool
266 {
267 $this->svy_log->debug("Deleting Survey, ref id: " . $this->getRefId() . ", obj id: " .
268 $this->getId() . ", title: " . $this->getTitle());
269 $this->svy_log->debug("References: " . $this->countReferences());
270 if ($this->countReferences() === 1) {
271 $this->deleteMetaData();
272
273 // Delete all survey questions, constraints and materials
274 foreach ($this->questions as $question_id) {
275 $this->svy_log->debug("Remove question " . $question_id);
276 $this->removeQuestion($question_id);
277 }
278 $this->deleteSurveyRecord();
279
281 }
282
283 $this->svy_log->debug("Call parent delete.");
284 $remove = parent::delete();
285
286 // always call parent delete function first!!
287 if (!$remove) {
288 return false;
289 }
290 return true;
291 }
static delDir(string $a_dir, bool $a_clean_only=false)
removes a dir and all its content (subdirs and files) recursively
removeQuestion(int $question_id)
getImportDirectory()
get import directory of survey
deleteSurveyRecord()
Deletes the survey from the database.

References ilObject\countReferences(), ilFileUtils\delDir(), ilObject\deleteMetaData(), deleteSurveyRecord(), ilObject\getId(), getImportDirectory(), ilObject\getRefId(), ilObject\getTitle(), and removeQuestion().

+ Here is the call graph for this function:

◆ deleteAllUserData()

ilObjSurvey::deleteAllUserData ( bool  $reset_LP = true)

Deletes all user data of a survey.

Parameters
bool$reset_LPnotice that the LP can only be reset it the determining components still exist
Todo:
move to run manager/repo

Definition at line 354 of file class.ilObjSurvey.php.

356 : void {
358
359 $result = $ilDB->queryF(
360 "SELECT finished_id FROM svy_finished WHERE survey_fi = %s",
361 array('integer'),
362 array($this->getSurveyId())
363 );
364 $active_array = array();
365 while ($row = $ilDB->fetchAssoc($result)) {
366 $active_array[] = $row["finished_id"];
367 }
368
369 $affectedRows = $ilDB->manipulateF(
370 "DELETE FROM svy_finished WHERE survey_fi = %s",
371 array('integer'),
372 array($this->getSurveyId())
373 );
374
375 foreach ($active_array as $active_fi) {
376 $affectedRows = $ilDB->manipulateF(
377 "DELETE FROM svy_answer WHERE active_fi = %s",
378 array('integer'),
379 array($active_fi)
380 );
381 $affectedRows = $ilDB->manipulateF(
382 "DELETE FROM svy_times WHERE finished_fi = %s",
383 array('integer'),
384 array($active_fi)
385 );
386 }
387
388 if ($reset_LP) {
389 $lp_obj = ilObjectLP::getInstance($this->getId());
390 $lp_obj->resetLPDataForCompleteObject();
391 }
392
393 $this->invitation_manager->removeAll($this->getSurveyId());
394 }
static getInstance(int $obj_id)

Referenced by deleteSurveyRecord().

+ Here is the caller graph for this function:

◆ deleteAppraisee()

ilObjSurvey::deleteAppraisee ( int  $a_user_id)
Todo:
move to appraisal manager

Definition at line 4422 of file class.ilObjSurvey.php.

4424 : void {
4425 $ilDB = $this->db;
4426
4427 $ilDB->manipulate("DELETE FROM svy_360_appr" .
4428 " WHERE obj_id = " . $ilDB->quote($this->getSurveyId(), "integer") .
4429 " AND user_id = " . $ilDB->quote($a_user_id, "integer"));
4430
4431 $set = $ilDB->query("SELECT user_id" .
4432 " FROM svy_360_rater" .
4433 " WHERE obj_id = " . $ilDB->quote($this->getSurveyId(), "integer") .
4434 " AND appr_id = " . $ilDB->quote($a_user_id, "integer"));
4435 while ($row = $ilDB->fetchAssoc($set)) {
4436 $this->deleteRater($a_user_id, $row["user_id"]);
4437 }
4438 // appraisee will not be part of raters table
4439 if ($this->get360SelfEvaluation()) {
4440 $this->deleteRater($a_user_id, $a_user_id);
4441 }
4442 }
deleteRater(int $a_appraisee_id, int $a_user_id, int $a_anonymous_id=0)

◆ deleteConstraint()

ilObjSurvey::deleteConstraint ( int  $constraint_id)

Deletes a single constraint.

Todo:
move to constraint manager/repo

Definition at line 1782 of file class.ilObjSurvey.php.

1784 : void {
1785 $ilDB = $this->db;
1786 $affectedRows = $ilDB->manipulateF(
1787 "DELETE FROM svy_constraint WHERE constraint_id = %s",
1788 array('integer'),
1789 array($constraint_id)
1790 );
1791 $affectedRows = $ilDB->manipulateF(
1792 "DELETE FROM svy_qst_constraint WHERE constraint_fi = %s",
1793 array('integer'),
1794 array($constraint_id)
1795 );
1796 }

◆ deleteConstraints()

ilObjSurvey::deleteConstraints ( int  $question_id)

Deletes the constraints for a question.

Todo:
move to constraint manager/repo

Definition at line 1760 of file class.ilObjSurvey.php.

1762 : void {
1763 $ilDB = $this->db;
1764 $result = $ilDB->queryF(
1765 "SELECT constraint_fi FROM svy_qst_constraint WHERE question_fi = %s AND survey_fi = %s",
1766 array('integer','integer'),
1767 array($question_id, $this->getSurveyId())
1768 );
1769 $constraints = array();
1770 while ($row = $ilDB->fetchAssoc($result)) {
1771 $constraints[] = $row["constraint_fi"];
1772 }
1773 foreach ($constraints as $constraint_id) {
1774 $this->deleteConstraint($constraint_id);
1775 }
1776 }
deleteConstraint(int $constraint_id)
Deletes a single constraint.

◆ deleteRater()

ilObjSurvey::deleteRater ( int  $a_appraisee_id,
int  $a_user_id,
int  $a_anonymous_id = 0 
)
Todo:
move to appraisal manager

Definition at line 4542 of file class.ilObjSurvey.php.

4546 : void {
4547 $ilDB = $this->db;
4548
4549 $finished_id = $this->getFinishedIdForAppraiseeIdAndRaterId($a_appraisee_id, $a_user_id);
4550 if ($finished_id) {
4551 $this->removeSelectedSurveyResults(array($finished_id));
4552 }
4553
4554 $ilDB->manipulate("DELETE FROM svy_360_rater" .
4555 " WHERE obj_id = " . $ilDB->quote($this->getSurveyId(), "integer") .
4556 " AND appr_id = " . $ilDB->quote($a_appraisee_id, "integer") .
4557 " AND user_id = " . $ilDB->quote($a_user_id, "integer") .
4558 " AND anonymous_id = " . $ilDB->quote($a_anonymous_id, "integer"));
4559 }
getFinishedIdForAppraiseeIdAndRaterId(int $a_appr_id, int $a_rat_id)
Get finished id for an appraisee and a rater.
removeSelectedSurveyResults(array $finished_ids)
Deletes the user data of a given array of survey participants.

◆ deleteSurveyCode()

ilObjSurvey::deleteSurveyCode ( string  $survey_code)
Todo:
move to code manager

Definition at line 3894 of file class.ilObjSurvey.php.

3896 : void {
3897 $ilDB = $this->db;
3898
3899 if ($survey_code !== '') {
3900 $affectedRows = $ilDB->manipulateF(
3901 "DELETE FROM svy_anonymous WHERE survey_fi = %s AND survey_key = %s",
3902 array('integer', 'text'),
3903 array($this->getSurveyId(), $survey_code)
3904 );
3905 }
3906 }

References $ilDB.

◆ deleteSurveyRecord()

ilObjSurvey::deleteSurveyRecord ( )

Deletes the survey from the database.

Todo:
move to survey manager/repo

Definition at line 297 of file class.ilObjSurvey.php.

297 : void
298 {
300
301 $ilDB->manipulateF(
302 "DELETE FROM svy_svy WHERE survey_id = %s",
303 array('integer'),
304 array($this->getSurveyId())
305 );
306
307 $result = $ilDB->queryF(
308 "SELECT questionblock_fi FROM svy_qblk_qst WHERE survey_fi = %s",
309 array('integer'),
310 array($this->getSurveyId())
311 );
312 $questionblocks = array();
313 while ($row = $ilDB->fetchAssoc($result)) {
314 $questionblocks[] = $row["questionblock_fi"];
315 }
316 if (count($questionblocks)) {
317 $affectedRows = $ilDB->manipulate("DELETE FROM svy_qblk WHERE " . $ilDB->in('questionblock_id', $questionblocks, false, 'integer'));
318 }
319 $ilDB->manipulateF(
320 "DELETE FROM svy_qblk_qst WHERE survey_fi = %s",
321 array('integer'),
322 array($this->getSurveyId())
323 );
324 $this->deleteAllUserData(false);
325
326 if (isset($this->code_manager)) {
327 $this->code_manager->deleteAll(true);
328 }
329
330 // delete export files
331 $svy_data_dir = ilFileUtils::getDataDir() . "/svy_data";
332 $directory = $svy_data_dir . "/svy_" . $this->getId();
333 if (is_dir($directory)) {
334 ilFileUtils::delDir($directory);
335 }
336
337 $mobs = ilObjMediaObject::_getMobsOfObject("svy:html", $this->getId());
338 // remaining usages are not in text anymore -> delete them
339 // and media objects (note: delete method of ilObjMediaObject
340 // checks whether object is used in another context; if yes,
341 // the object is not deleted!)
342 foreach ($mobs as $mob) {
343 ilObjMediaObject::_removeUsage($mob, "svy:html", $this->getId());
344 $mob_obj = new ilObjMediaObject($mob);
345 $mob_obj->delete();
346 }
347 }
static _removeUsage(int $a_mob_id, string $a_type, int $a_id, int $a_usage_hist_nr=0, string $a_lang="-")
Remove usage of mob in another container.
deleteAllUserData(bool $reset_LP=true)
Deletes all user data of a survey.

References ilObject\$db, $ilDB, ilObjMediaObject\_getMobsOfObject(), ilObjMediaObject\_removeUsage(), ilFileUtils\delDir(), deleteAllUserData(), ilFileUtils\getDataDir(), ilObject\getId(), and getSurveyId().

Referenced by delete().

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

◆ deleteUserSettings()

ilObjSurvey::deleteUserSettings ( int  $id)

Definition at line 663 of file class.ilObjSurvey.php.

665 : void {
667
668 $ilDB->manipulateF(
669 "DELETE FROM svy_settings WHERE settings_id = %s",
670 array('integer'),
671 array($id)
672 );
673 }

◆ deleteWorkingData()

ilObjSurvey::deleteWorkingData ( int  $question_id,
int  $active_id 
)

Deletes the working data of a question in the database.

Todo:
move to run(?) manager/repo

Definition at line 2276 of file class.ilObjSurvey.php.

2279 : void {
2280 $ilDB = $this->db;
2281
2282 $affectedRows = $ilDB->manipulateF(
2283 "DELETE FROM svy_answer WHERE question_fi = %s AND active_fi = %s",
2284 array('integer','integer'),
2285 array($question_id, $active_id)
2286 );
2287 }

◆ doCreateMetaData()

ilObjSurvey::doCreateMetaData ( )
protected

Reimplemented from ilObject.

Definition at line 223 of file class.ilObjSurvey.php.

223 : void
224 {
225 $this->saveAuthorToMetadata();
226 }
saveAuthorToMetadata(string $a_author="")
Saves an authors name into the lifecycle metadata if no lifecycle metadata exists This will only be c...

References saveAuthorToMetadata().

+ Here is the call graph for this function:

◆ duplicateQuestionForSurvey()

ilObjSurvey::duplicateQuestionForSurvey ( int  $question_id,
bool  $a_force = false 
)

Takes a question and creates a copy of the question for use in the survey.

Todo:
move to survey question manager/repo

Definition at line 530 of file class.ilObjSurvey.php.

533 : int {
534 $questiontype = $this->getQuestionType($question_id);
535 $question_gui = $this->getQuestionGUI($questiontype, $question_id);
536
537 // check if question is a pool question at all, if not do nothing
538 if ($this->getId() === $question_gui->object->getObjId() && !$a_force) {
539 return $question_id;
540 }
541
542 $duplicate_id = $question_gui->object->duplicate(true, "", "", 0, $this->getId());
543 return $duplicate_id;
544 }
getQuestionType(int $question_id)
getQuestionGUI(string $questiontype, int $question_id)

◆ findCodeForUser()

ilObjSurvey::findCodeForUser ( int  $a_user_id)
Todo:
move to code manager

Definition at line 4765 of file class.ilObjSurvey.php.

4767 : string {
4768 $ilDB = $this->db;
4769
4770 if ($a_user_id !== ANONYMOUS_USER_ID) {
4771 $set = $ilDB->query("SELECT sf.anonymous_id FROM svy_finished sf" .
4772 " WHERE sf.survey_fi = " . $ilDB->quote($this->getSurveyId(), "integer") .
4773 " AND sf.user_fi = " . $ilDB->quote($a_user_id, "integer"));
4774 $a_code = $ilDB->fetchAssoc($set);
4775 return (string) ($a_code["anonymous_id"] ?? "");
4776 }
4777 return "";
4778 }

References $ilDB.

◆ finishSurvey()

ilObjSurvey::finishSurvey ( int  $finished_id,
int  $appr_id = 0 
)

Finishes the survey creating an entry in the database.

Todo:
move to run manager

Definition at line 2316 of file class.ilObjSurvey.php.

2319 : void {
2320 $ilDB = $this->db;
2321
2322 $ilDB->manipulateF(
2323 "UPDATE svy_finished SET state = %s, tstamp = %s" .
2324 " WHERE survey_fi = %s AND finished_id = %s",
2325 array('text','integer','integer','integer'),
2326 array(1, time(), $this->getSurveyId(), $finished_id)
2327 );
2328
2329 // self eval writes skills on finishing
2330 if ($this->getMode() === self::MODE_SELF_EVAL) {
2331 $user = $this->getUserDataFromActiveId($finished_id);
2332 $sskill = new ilSurveySkill($this);
2333 $sskill->writeAndAddSelfEvalSkills($user['usr_id']);
2334 }
2335
2336 // self eval writes skills on finishing
2337 if ($this->getMode() === self::MODE_IND_FEEDB) {
2338 // we use a rater id like "a27" for anonymous or
2339 // "123" for non anonymous user
2340 // @todo: move this e.g. to participant manager
2341 $raters = $this->getRatersData($appr_id);
2342 $run_manager = $this->survey_service
2343 ->domain()
2344 ->execution()
2345 ->run($this, $this->user->getId(), $appr_id);
2346 $run = $run_manager->getById($finished_id);
2347 $rater_id = "";
2348 if ($run->getUserId() !== 0 && $run->getUserId() !== ANONYMOUS_USER_ID) {
2349 $rater_id = $run->getUserId();
2350 } else {
2351 foreach ($raters as $id => $rater) {
2352 if (($rater["code"] ?? "") === $run->getCode()) {
2353 $rater_id = $id;
2354 }
2355 }
2356 }
2357 $sskill = new ilSurveySkill($this);
2358 //$sskill->writeAndAddSelfEvalSkills($user['usr_id']);
2359 $sskill->writeAndAddIndFeedbackSkills($finished_id, $appr_id, $rater_id);
2360 }
2361
2362 $this->checkTutorNotification();
2363 }
getUserDataFromActiveId(int $active_id, bool $force_non_anonymous=false)
Returns run information.
checkTutorNotification()
Check, if mail to tutors after all participants have finished the survey should be sent.
getRatersData(int $a_appraisee_id)

◆ fixSequenceStructure()

ilObjSurvey::fixSequenceStructure ( )

Definition at line 1074 of file class.ilObjSurvey.php.

1074 : void
1075 {
1076 global $DIC;
1077
1078 $ilDB = $DIC->database();
1079 //return;
1080 // we keep all survey question ids with their lowest sequence
1081 $result = $ilDB->queryF(
1082 "SELECT * FROM svy_svy_qst WHERE survey_fi = %s ORDER BY sequence",
1083 array('integer'),
1084 array($this->getSurveyId())
1085 );
1086
1087 // step 1: find duplicates -> $to_delete_ids
1088 $fis = array();
1089 $to_delete_ids = array();
1090 while ($data = $ilDB->fetchAssoc($result)) {
1091 if (in_array($data["question_fi"], $fis)) { // found a duplicate
1092 $to_delete_ids[] = $data["survey_question_id"];
1093 } else {
1094 $fis[] = $data["question_fi"];
1095 }
1096 }
1097
1098 // step 2: we delete the duplicates
1099 if (count($to_delete_ids) > 0) {
1100 $ilDB->manipulate($q = "DELETE FROM svy_svy_qst" .
1101 " WHERE " . $ilDB->in("survey_question_id", $to_delete_ids, false, "integer") .
1102 " AND survey_fi = " . $ilDB->quote($this->getSurveyId(), "integer"));
1103 $this->svy_log->debug("delete: " . $q);
1104
1105 $ilDB->manipulate($q = "DELETE FROM svy_qblk_qst " .
1106 " WHERE " . $ilDB->in("question_fi", $fis, true, "integer") .
1107 " AND survey_fi = " . $ilDB->quote($this->getSurveyId(), "integer"));
1108 $this->svy_log->debug("delete: " . $q);
1109 }
1110
1111 // step 3: we fix the sequence
1112 $set = $ilDB->query("SELECT * FROM svy_svy_qst " .
1113 " WHERE survey_fi = " . $ilDB->quote($this->getSurveyId(), "integer") . " ORDER BY sequence");
1114 $seq = 0;
1115 while ($rec = $ilDB->fetchAssoc($set)) {
1116 $ilDB->manipulate(
1117 $q = "UPDATE svy_svy_qst SET " .
1118 " sequence = " . $ilDB->quote($seq++, "integer") .
1119 " WHERE survey_question_id = " . $ilDB->quote($rec["survey_question_id"], "integer")
1120 );
1121 $this->svy_log->debug("update: " . $q);
1122 }
1123 }
$q
Definition: shib_logout.php:23

References $data, $DIC, $ilDB, and $q.

◆ get360Mode()

ilObjSurvey::get360Mode ( )

Definition at line 4226 of file class.ilObjSurvey.php.

4226 : bool
4227 {
4228 if ($this->getMode() === self::MODE_360) {
4229 return true;
4230 }
4231 return false;
4232 }

Referenced by ILIAS\Survey\Evaluation\EvaluationManager\getSelectableAppraisees().

+ Here is the caller graph for this function:

◆ get360Results()

ilObjSurvey::get360Results ( )

Definition at line 4269 of file class.ilObjSurvey.php.

4269 : int
4270 {
4272 }

Referenced by ILIAS\Survey\Evaluation\EvaluationManager\isMultiParticipantsView().

+ Here is the caller graph for this function:

◆ get360SelfAppraisee()

ilObjSurvey::get360SelfAppraisee ( )

Definition at line 4249 of file class.ilObjSurvey.php.

4249 : bool
4250 {
4252 }

Referenced by ILIAS\Survey\Participants\StatusManager\canAddItselfAsAppraisee().

+ Here is the caller graph for this function:

◆ get360SelfEvaluation()

ilObjSurvey::get360SelfEvaluation ( )

Definition at line 4239 of file class.ilObjSurvey.php.

4239 : bool
4240 {
4242 }

◆ get360SelfRaters()

ilObjSurvey::get360SelfRaters ( )

Definition at line 4259 of file class.ilObjSurvey.php.

4259 : bool
4260 {
4262 }

◆ getActivationEndDate()

ilObjSurvey::getActivationEndDate ( )

Definition at line 5487 of file class.ilObjSurvey.php.

5487 : ?int
5488 {
5490 }

◆ getActivationStartDate()

ilObjSurvey::getActivationStartDate ( )

Definition at line 5482 of file class.ilObjSurvey.php.

5482 : ?int
5483 {
5485 }

◆ getActivationVisibility()

ilObjSurvey::getActivationVisibility ( )

Definition at line 1303 of file class.ilObjSurvey.php.

1303 : bool
1304 {
1306 }

◆ getActiveID()

ilObjSurvey::getActiveID ( int  $user_id,
string  $anonymize_id,
int  $appr_id 
)

Get run id.

Todo:
move to run manager/repo

Definition at line 2514 of file class.ilObjSurvey.php.

2518 : ?int {
2519 $ilDB = $this->db;
2520 // #15031 - should not matter if code was used by registered or anonymous (each code must be unique)
2521 if ($anonymize_id) {
2522 $result = $ilDB->queryF(
2523 "SELECT finished_id FROM svy_finished" .
2524 " WHERE survey_fi = %s AND anonymous_id = %s AND appr_id = %s",
2525 array('integer','text','integer'),
2526 array($this->getSurveyId(), $anonymize_id, $appr_id)
2527 );
2528 } else {
2529 if ($user_id == ANONYMOUS_USER_ID) {
2530 return null;
2531 }
2532 $result = $ilDB->queryF(
2533 "SELECT finished_id FROM svy_finished" .
2534 " WHERE survey_fi = %s AND user_fi = %s AND appr_id = %s",
2535 array('integer','integer','integer'),
2536 array($this->getSurveyId(), $user_id, $appr_id)
2537 );
2538 }
2539 if ($result->numRows() === 0) {
2540 return null;
2541 } else {
2542 $row = $ilDB->fetchAssoc($result);
2543 return (int) $row["finished_id"];
2544 }
2545 }

References $ilDB.

◆ getAllRelations()

ilObjSurvey::getAllRelations ( bool  $short_as_key = false)
Todo:
move to constraint manager/repo

Definition at line 2242 of file class.ilObjSurvey.php.

2244 : array {
2245 $ilDB = $this->db;
2246
2247 // #7987
2248 $custom_order = array("equal", "not_equal", "less", "less_or_equal", "more", "more_or_equal");
2249 $custom_order = array_flip($custom_order);
2250
2251 $result_array = array();
2252 $result = $ilDB->query("SELECT * FROM svy_relation");
2253 while ($row = $ilDB->fetchAssoc($result)) {
2254 if ($short_as_key) {
2255 $result_array[$row["shortname"]] = array("short" => $row["shortname"], "long" => $row["longname"], "id" => $row["relation_id"], "order" => $custom_order[$row["longname"]]);
2256 } else {
2257 $result_array[$row["relation_id"]] = array("short" => $row["shortname"], "long" => $row["longname"], "order" => $custom_order[$row["longname"]]);
2258 }
2259 }
2260
2261 $result_array = ilArrayUtil::sortArray($result_array, "order", "ASC", true, true);
2262 foreach ($result_array as $idx => $item) {
2263 unset($result_array[$idx]["order"]);
2264 }
2265
2266 return $result_array;
2267 }
static sortArray(array $array, string $a_array_sortby_key, string $a_array_sortorder="asc", bool $a_numeric=false, bool $a_keep_keys=false)

◆ getAnonymize()

ilObjSurvey::getAnonymize ( )

Definition at line 951 of file class.ilObjSurvey.php.

951 : int
952 {
953 return $this->anonymize;
954 }

◆ getAnonymousIdByCode()

ilObjSurvey::getAnonymousIdByCode ( string  $a_code)
Todo:
move to code manager

Definition at line 4655 of file class.ilObjSurvey.php.

4657 : ?int {
4658 $ilDB = $this->db;
4659 $set = $ilDB->query("SELECT anonymous_id FROM svy_anonymous" .
4660 " WHERE survey_fi = " . $ilDB->quote($this->getSurveyId(), "integer") .
4661 " AND survey_key = " . $ilDB->quote($a_code, "text"));
4662 $res = $ilDB->fetchAssoc($set);
4663 return $res["anonymous_id"] ?? null;
4664 }
$res
Definition: ltiservices.php:69

Referenced by ILIAS\Survey\Participants\StatusManager\isExternalRater().

+ Here is the caller graph for this function:

◆ getAppraiseesData()

ilObjSurvey::getAppraiseesData ( )
Todo:
move to appraisal manager, use dto

Definition at line 4447 of file class.ilObjSurvey.php.

4447 : array
4448 {
4449 $ilDB = $this->db;
4450
4451 $res = array();
4452
4453 $set = $ilDB->query("SELECT * FROM svy_360_appr" .
4454 " WHERE obj_id = " . $ilDB->quote($this->getSurveyId(), "integer"));
4455 while ($row = $ilDB->fetchAssoc($set)) {
4456 $name = ilObjUser::_lookupName($row["user_id"]);
4457 $name["email"] = ilObjUser::_lookupEmail($row["user_id"]);
4458 $name["name"] = $name["lastname"] . ", " . $name["firstname"];
4459 $res[$row["user_id"]] = $name;
4460
4461 $finished = 0;
4462 $raters = $this->getRatersData($row["user_id"]);
4463 foreach ($raters as $rater) {
4464 if ($rater["finished"]) {
4465 $finished++;
4466 }
4467 }
4468 $res[$row["user_id"]]["finished"] = $finished . "/" . count($raters);
4469 $res[$row["user_id"]]["closed"] = $row["has_closed"];
4470 }
4471
4472 return $res;
4473 }
static _lookupName(int $a_user_id)
static _lookupEmail(int $a_user_id)

References $ilDB, $res, ilObjUser\_lookupEmail(), and ilObjUser\_lookupName().

Referenced by ILIAS\Survey\Evaluation\EvaluationManager\getSelectableAppraisees().

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

◆ getAppraiseesToRate()

ilObjSurvey::getAppraiseesToRate ( ?int  $a_user_id,
?int  $a_anonymous_id = null 
)
Todo:
move to appraisal manager
Returns
int[]

Definition at line 4620 of file class.ilObjSurvey.php.

4623 : array {
4624 $ilDB = $this->db;
4625
4626 $res = array();
4627
4628 $sql = "SELECT appr_id FROM svy_360_rater" .
4629 " WHERE obj_id = " . $ilDB->quote($this->getSurveyId(), "integer");
4630
4631 if ($a_user_id) {
4632 $sql .= " AND user_id = " . $ilDB->quote($a_user_id, "integer");
4633 } else {
4634 $sql .= " AND anonymous_id = " . $ilDB->quote($a_anonymous_id, "integer");
4635 }
4636
4637 $set = $ilDB->query($sql);
4638 while ($row = $ilDB->fetchAssoc($set)) {
4639 $res[] = (int) $row["appr_id"];
4640 }
4641
4642 // user may evaluate himself if already appraisee
4643 if ($this->get360SelfEvaluation() &&
4644 $this->isAppraisee((int) $a_user_id) &&
4645 !in_array($a_user_id, $res)) {
4646 $res[] = $a_user_id;
4647 }
4648
4649 return $res;
4650 }

Referenced by ILIAS\Survey\Participants\StatusManager\isExternalRater().

+ Here is the caller graph for this function:

◆ getAuthor()

ilObjSurvey::getAuthor ( )

Definition at line 1152 of file class.ilObjSurvey.php.

1152 : string
1153 {
1154 return $this->domain->metadata()->getAuthorsFromLOM(
1155 $this->getId(),
1156 0,
1157 $this->getType()
1158 );
1159 }

References ILIAS\Survey\Mode\getId().

+ Here is the call graph for this function:

◆ getAvailableQuestionpools()

ilObjSurvey::getAvailableQuestionpools ( bool  $use_obj_id = false,
bool  $could_be_offline = false,
bool  $showPath = false,
string  $permission = "read" 
)

Returns the available question pools for the active user.

Definition at line 2029 of file class.ilObjSurvey.php.

2034 : array {
2035 return ilObjSurveyQuestionPool::_getAvailableQuestionpools($use_obj_id, $could_be_offline, $showPath, $permission);
2036 }
static _getAvailableQuestionpools(bool $use_object_id=false, bool $could_be_offline=false, bool $showPath=false, string $permission="read")
Returns the available question pools for the active user.

◆ getCalculateSumScore()

ilObjSurvey::getCalculateSumScore ( )

Definition at line 962 of file class.ilObjSurvey.php.

962 : bool
963 {
965 }

◆ getConstraints()

ilObjSurvey::getConstraints ( int  $question_id)

Returns the constraints to a given question or questionblock.

Todo:
move to constraint manager, introduce dto

Definition at line 2065 of file class.ilObjSurvey.php.

2067 : array {
2068 $ilDB = $this->db;
2069
2070 $result_array = array();
2071 $result = $ilDB->queryF(
2072 "SELECT svy_constraint.*, svy_relation.* FROM svy_qst_constraint, svy_constraint, svy_relation " .
2073 "WHERE svy_constraint.relation_fi = svy_relation.relation_id AND " .
2074 "svy_qst_constraint.constraint_fi = svy_constraint.constraint_id AND svy_qst_constraint.question_fi = %s " .
2075 "AND svy_qst_constraint.survey_fi = %s",
2076 array('integer','integer'),
2077 array($question_id, $this->getSurveyId())
2078 );
2079 while ($row = $ilDB->fetchAssoc($result)) {
2080 $question_type = SurveyQuestion::_getQuestionType($row["question_fi"]);
2081 SurveyQuestion::_includeClass($question_type);
2082 $question = new $question_type();
2083 $question->loadFromDb($row["question_fi"]);
2084 $valueoutput = $question->getPreconditionValueOutput($row["value"]);
2085 $result_array[] = array("id" => $row["constraint_id"],
2086 "question" => $row["question_fi"],
2087 "short" => $row["shortname"],
2088 "long" => $row["longname"],
2089 "value" => $row["value"],
2090 "conjunction" => $row["conjunction"],
2091 "valueoutput" => $valueoutput
2092 );
2093 }
2094 return $result_array;
2095 }

Referenced by SurveyConstraintsTableGUI\initItems().

+ Here is the caller graph for this function:

◆ getEndDate()

ilObjSurvey::getEndDate ( )

Definition at line 1224 of file class.ilObjSurvey.php.

1224 : string
1225 {
1226 return $this->end_date;
1227 }

◆ getEvaluationAccess()

ilObjSurvey::getEvaluationAccess ( )

Definition at line 1286 of file class.ilObjSurvey.php.

1286 : string
1287 {
1289 }
string $evaluation_access

◆ getEvaluationByUser()

ilObjSurvey::getEvaluationByUser ( array  $questions,
int  $active_id 
)

Calculates the evaluation data for a given run.

Todo:
move to evaluation manager

Definition at line 2776 of file class.ilObjSurvey.php.

2779 : array {
2780 $ilDB = $this->db;
2781
2782 // collect all answers
2783 $answers = array();
2784 $result = $ilDB->queryF(
2785 "SELECT * FROM svy_answer WHERE active_fi = %s",
2786 array('integer'),
2787 array($active_id)
2788 );
2789 while ($row = $ilDB->fetchAssoc($result)) {
2790 if (!is_array($answers[$row["question_fi"]])) {
2791 $answers[$row["question_fi"]] = array();
2792 }
2793 $answers[$row["question_fi"]][] = $row;
2794 }
2795 $userdata = $this->getUserDataFromActiveId($active_id);
2796 $resultset = array(
2797 "name" => $userdata["fullname"],
2798 "firstname" => $userdata["firstname"],
2799 "lastname" => $userdata["lastname"],
2800 "login" => $userdata["login"],
2801 "gender" => $userdata["gender"],
2802 "answers" => array()
2803 );
2804 foreach ($questions as $key => $question) {
2805 if (array_key_exists($key, $answers)) {
2806 $resultset["answers"][$key] = $answers[$key];
2807 } else {
2808 $resultset["answers"][$key] = array();
2809 }
2810 sort($resultset["answers"][$key]);
2811 }
2812 return $resultset;
2813 }

◆ getExistingQuestions()

ilObjSurvey::getExistingQuestions ( )

Gets the question id's of the questions which are already in the survey.

Returns
int[]

Definition at line 1332 of file class.ilObjSurvey.php.

1332 : array
1333 {
1334 $ilDB = $this->db;
1335 $existing_questions = array();
1336 $result = $ilDB->queryF(
1337 "SELECT svy_question.original_id FROM svy_question, svy_svy_qst WHERE " .
1338 "svy_svy_qst.survey_fi = %s AND svy_svy_qst.question_fi = svy_question.question_id",
1339 array('integer'),
1340 array($this->getSurveyId())
1341 );
1342 while ($data = $ilDB->fetchAssoc($result)) {
1343 if ($data["original_id"]) {
1344 $existing_questions[] = (int) $data["original_id"];
1345 }
1346 }
1347 return $existing_questions;
1348 }

References $data, $ilDB, and ILIAS\Repository\int().

+ Here is the call graph for this function:

◆ getExportDirectory()

ilObjSurvey::getExportDirectory ( )
Todo:
move to export sub-service

Definition at line 3470 of file class.ilObjSurvey.php.

3470 : string
3471 {
3472 $export_dir = ilFileUtils::getDataDir() . "/svy_data" . "/svy_" . $this->getId() . "/export";
3473
3474 return $export_dir;
3475 }

References ilFileUtils\getDataDir(), and ILIAS\Survey\Mode\getId().

+ Here is the call graph for this function:

◆ getExternalCodeRecipients()

ilObjSurvey::getExternalCodeRecipients ( bool  $a_check_finished = false)
Todo:
move to code manager

Definition at line 3838 of file class.ilObjSurvey.php.

3840 : array {
3841 $ilDB = $this->db;
3842 $result = $ilDB->queryF(
3843 "SELECT survey_key code, externaldata, sent FROM svy_anonymous WHERE survey_fi = %s",
3844 array('integer'),
3845 array($this->getSurveyId())
3846 );
3847 $res = array();
3848 while ($row = $ilDB->fetchAssoc($result)) {
3849 if (!$row['externaldata']) {
3850 continue;
3851 }
3852
3853 $externaldata = unserialize((string) $row['externaldata'], ['allowed_classes' => false]);
3854 if (!$externaldata['email']) {
3855 continue;
3856 }
3857
3858 $externaldata['code'] = $row['code'];
3859 $externaldata['sent'] = $row['sent'];
3860
3861 if ($a_check_finished) {
3862 #23294
3863 //$externaldata['finished'] = $this->isSurveyCodeUsed($row['code']);
3864 $externaldata['finished'] = $this->isSurveyFinishedByCode($row['code']);
3865 }
3866
3867 $res[] = $externaldata;
3868 }
3869 return $res;
3870 }
isSurveyFinishedByCode(string $a_code)
Get if survey is finished for a specific anonymous user code.

◆ getFinishedIdForAppraiseeIdAndRaterId()

ilObjSurvey::getFinishedIdForAppraiseeIdAndRaterId ( int  $a_appr_id,
int  $a_rat_id 
)

Get finished id for an appraisee and a rater.

Todo:
move to run manager

Definition at line 4830 of file class.ilObjSurvey.php.

4833 : ?int {
4834 $ilDB = $this->db;
4835
4836 $set = $ilDB->query("SELECT finished_id, user_fi FROM svy_finished" .
4837 " WHERE survey_fi = " . $ilDB->quote($this->getSurveyId(), "integer") .
4838 " AND appr_id = " . $ilDB->quote($a_appr_id, "integer") .
4839 " AND user_fi = " . $ilDB->quote($a_rat_id, "integer"));
4840 if ($row = $ilDB->fetchAssoc($set)) {
4841 return (int) $row["finished_id"];
4842 }
4843 return null;
4844 }

◆ getFinishedIdsForAppraiseeId()

ilObjSurvey::getFinishedIdsForAppraiseeId ( int  $a_appr_id,
bool  $a_exclude_appraisee = false 
)
Returns
int[]
Todo:
move to run manager

Definition at line 4805 of file class.ilObjSurvey.php.

4808 : array {
4809 $ilDB = $this->db;
4810
4811 $res = array();
4812
4813 $set = $ilDB->query("SELECT finished_id, user_fi FROM svy_finished" .
4814 " WHERE survey_fi = " . $ilDB->quote($this->getSurveyId(), "integer") .
4815 " AND appr_id = " . $ilDB->quote($a_appr_id, "integer"));
4816 while ($row = $ilDB->fetchAssoc($set)) {
4817 if ($a_exclude_appraisee && $row["user_fi"] == $a_appr_id) {
4818 continue;
4819 }
4820 $res[] = (int) $row["finished_id"];
4821 }
4822
4823 return $res;
4824 }

◆ getImportDirectory()

ilObjSurvey::getImportDirectory ( )

get import directory of survey

Todo:
move to export sub-service

Definition at line 3511 of file class.ilObjSurvey.php.

3511 : string
3512 {
3513 $import_dir = ilFileUtils::getDataDir() . "/svy_data" .
3514 "/svy_" . $this->getId() . "/import";
3515 if (!is_dir($import_dir)) {
3516 ilFileUtils::makeDirParents($import_dir);
3517 }
3518 if (is_dir($import_dir)) {
3519 return $import_dir;
3520 } else {
3521 return "";
3522 }
3523 }
static makeDirParents(string $a_dir)
Create a new directory and all parent directories.

References ilFileUtils\getDataDir(), ILIAS\Survey\Mode\getId(), and ilFileUtils\makeDirParents().

Referenced by delete().

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

◆ getIntroduction()

ilObjSurvey::getIntroduction ( )

Definition at line 1318 of file class.ilObjSurvey.php.

1318 : string
1319 {
1320 return $this->introduction;
1321 }

◆ getLastAccess()

ilObjSurvey::getLastAccess ( int  $finished_id)
Todo:
move to run manager

Definition at line 3957 of file class.ilObjSurvey.php.

3959 : ?int {
3960 $ilDB = $this->db;
3961
3962 $result = $ilDB->queryF(
3963 "SELECT tstamp FROM svy_answer WHERE active_fi = %s ORDER BY tstamp DESC",
3964 array('integer'),
3965 array($finished_id)
3966 );
3967 if ($result->numRows()) {
3968 $row = $ilDB->fetchAssoc($result);
3969 return (int) $row["tstamp"];
3970 } else {
3971 $result = $ilDB->queryF(
3972 "SELECT tstamp FROM svy_finished WHERE finished_id = %s",
3973 array('integer'),
3974 array($finished_id)
3975 );
3976 if ($result->numRows()) {
3977 $row = $ilDB->fetchAssoc($result);
3978 return (int) $row["tstamp"];
3979 }
3980 }
3981 return null;
3982 }

References $ilDB.

◆ getLastActivePage()

ilObjSurvey::getLastActivePage ( int  $active_id)

Returns the question id of the last active page a user visited in a survey.

Todo:
move to run manager/repo

Definition at line 2551 of file class.ilObjSurvey.php.

2553 : ?int {
2554 $ilDB = $this->db;
2555 $result = $ilDB->queryF(
2556 "SELECT lastpage FROM svy_finished WHERE finished_id = %s",
2557 array('integer'),
2558 array($active_id)
2559 );
2560 if ($row = $ilDB->fetchAssoc($result)) {
2561 return (int) $row["lastpage"];
2562 }
2563 return null;
2564 }

◆ getMailAddresses()

ilObjSurvey::getMailAddresses ( )

(Tutor) Recipients of "single participant has finished" mails

Definition at line 4114 of file class.ilObjSurvey.php.

4114 : string
4115 {
4116 return $this->mailaddresses;
4117 }

◆ getMailNotification()

ilObjSurvey::getMailNotification ( )

Send mail to tutors each time a participant finishes the survey?

Definition at line 4098 of file class.ilObjSurvey.php.

4098 : bool
4099 {
4101 }

◆ getMailParticipantData()

ilObjSurvey::getMailParticipantData ( )

Preceding text (incl.

placeholders) for "single participant has finished" mails

Definition at line 4130 of file class.ilObjSurvey.php.

4130 : string
4131 {
4133 }
string $mailparticipantdata

◆ getMaxSumScore()

ilObjSurvey::getMaxSumScore ( )

Definition at line 5639 of file class.ilObjSurvey.php.

5639 : int
5640 {
5641 $sum_score = 0;
5643 $sum_score += call_user_func([$c, "getMaxSumScore"], $this->getSurveyId());
5644 }
5645 return $sum_score;
5646 }
$c
Definition: deliver.php:25

References $c, and ilObjSurveyQuestionPool\_getQuestionClasses().

+ Here is the call graph for this function:

◆ getMode()

◆ getNextPage()

ilObjSurvey::getNextPage ( int  $active_page_question_id,
int  $direction 
)

Get current, previous or next page.

Parameters
int$active_page_question_idThe database id of one of the questions on that page
int$directionThe direction of the next page (-1 = previous page, 1 = next page)
Returns
?array question data or null, if there is no previous/next page
Exceptions
ilSurveyException
Todo:
move to execution manager

Definition at line 1996 of file class.ilObjSurvey.php.

1999 : ?array {
2000 $foundpage = -1;
2001 $pages = $this->getSurveyPages();
2002 if ($active_page_question_id === 0) {
2003 return $pages[0];
2004 }
2005 foreach ($pages as $key => $question_array) {
2006 foreach ($question_array as $question) {
2007 if ($active_page_question_id == $question["question_id"]) {
2008 $foundpage = $key;
2009 }
2010 }
2011 }
2012 if ($foundpage === -1) {
2013 throw new ilSurveyException("nextPage: Current page not found.");
2014 } else {
2015 $foundpage += $direction;
2016 if ($foundpage < 0) {
2017 return null;
2018 }
2019 if ($foundpage >= count($pages)) {
2020 return null;
2021 }
2022 return $pages[$foundpage];
2023 }
2024 }
getSurveyPages()
Returns the survey pages in an array (a page contains one or more questions)

◆ getNotificationTargetUserIds()

ilObjSurvey::getNotificationTargetUserIds ( bool  $a_use_invited)

These users must finish the survey to trigger the tutor notification "all users finished the survey" a) members of a parent group/course or b) all members that have been invited (svy_invitation) invitations are presented as tasks on the dashboard.

Definition at line 5259 of file class.ilObjSurvey.php.

5261 : array {
5263
5264 $user_ids = [];
5265 if ($a_use_invited) {
5266 $user_ids = $this->invitation_manager->getAllForSurvey($this->getSurveyId());
5267 } else {
5268 $parent_grp_ref_id = $tree->checkForParentType($this->getRefId(), "grp");
5269 if ($parent_grp_ref_id) {
5270 $part = new ilGroupParticipants(ilObject::_lookupObjId($parent_grp_ref_id));
5271 $user_ids = $part->getMembers();
5272 } else {
5273 $parent_crs_ref_id = $tree->checkForParentType($this->getRefId(), "crs");
5274 if ($parent_crs_ref_id) {
5275 $part = new ilCourseParticipants(ilObject::_lookupObjId($parent_crs_ref_id));
5276 $user_ids = $part->getMembers();
5277 }
5278 }
5279 }
5280 return $user_ids;
5281 }
ilTree $tree
static _lookupObjId(int $ref_id)
checkForParentType(int $a_ref_id, string $a_type, bool $a_exclude_source_check=false)
Check for parent type e.g check if a folder (ref_id 3) is in a parent course obj => checkForParentTyp...

◆ getOutro()

ilObjSurvey::getOutro ( )

Definition at line 1323 of file class.ilObjSurvey.php.

1323 : string
1324 {
1325 return $this->outro;
1326 }

◆ getParticipantTextResults()

ilObjSurvey::getParticipantTextResults ( int  $active_id)
protected

Definition at line 2485 of file class.ilObjSurvey.php.

2487 : string {
2488 $textresult = "";
2489 $userResults = $this->getUserSpecificResults(array($active_id));
2490 $questions = $this->getSurveyQuestions(true);
2491 $questioncounter = 1;
2492 foreach ($questions as $question_id => $question_data) {
2493 $textresult .= $questioncounter++ . ". " . $question_data["title"] . "\n";
2494 $found = $userResults[$question_id][$active_id];
2495 $text = "";
2496 if (is_array($found)) {
2497 $text = implode("\n", $found);
2498 } else {
2499 $text = $found;
2500 }
2501 if ($text === '') {
2503 }
2504 $text = str_replace("<br />", "\n", $text);
2505 $textresult .= $text . "\n\n";
2506 }
2507 return $textresult;
2508 }
getUserSpecificResults(array $finished_ids)
Calculates the evaluation data for the user specific results.
getSurveyQuestions(bool $with_answers=false)
Returns the survey questions and questionblocks in an array.
static getSurveySkippedValue()

◆ getPoolUsage()

ilObjSurvey::getPoolUsage ( )

Definition at line 4174 of file class.ilObjSurvey.php.

4174 : bool
4175 {
4176 return $this->pool_usage;
4177 }

◆ getPrecondition()

ilObjSurvey::getPrecondition ( int  $constraint_id)

Returns a precondition with a given id.

Todo:
move to constraint manager, introduce dto

Definition at line 2042 of file class.ilObjSurvey.php.

2044 : array {
2045 $ilDB = $this->db;
2046
2047 $result = $ilDB->queryF(
2048 "SELECT svy_constraint.*, svy_relation.*, svy_qst_constraint.question_fi ref_question_fi FROM svy_qst_constraint, svy_constraint, " .
2049 "svy_relation WHERE svy_constraint.relation_fi = svy_relation.relation_id AND " .
2050 "svy_qst_constraint.constraint_fi = svy_constraint.constraint_id AND svy_constraint.constraint_id = %s",
2051 array('integer'),
2052 array($constraint_id)
2053 );
2054 $pc = array();
2055 if ($result->numRows()) {
2056 $pc = $ilDB->fetchAssoc($result);
2057 }
2058 return $pc;
2059 }

◆ getQuestionblockQuestionIds()

ilObjSurvey::getQuestionblockQuestionIds ( int  $questionblock_id)
Parameters
int$questionblock_id
Returns
int[]
Todo:
move to survey question manager/repo

Definition at line 1629 of file class.ilObjSurvey.php.

1631 : array {
1632 $ilDB = $this->db;
1633
1634 // we need a correct order here, see #22011
1635 $result = $ilDB->queryF(
1636 "SELECT a.question_fi FROM svy_qblk_qst a JOIN svy_svy_qst b ON (a.question_fi = b.question_fi) " .
1637 " WHERE a.questionblock_fi = %s ORDER BY b.sequence",
1638 array("integer"),
1639 array($questionblock_id)
1640 );
1641 $ids = array();
1642 if ($result->numRows()) {
1643 while ($data = $ilDB->fetchAssoc($result)) {
1644 if (!in_array($data['question_fi'], $ids)) { // no duplicates, see #22018
1645 $ids[] = (int) $data['question_fi'];
1646 }
1647 }
1648 }
1649 return $ids;
1650 }

◆ getQuestionblockQuestions()

ilObjSurvey::getQuestionblockQuestions ( int  $questionblock_id)
Parameters
int$questionblock_id
Returns
string[] question titles
Todo:
move to survey question manager/repo

Definition at line 1592 of file class.ilObjSurvey.php.

1594 : array {
1595 $ilDB = $this->db;
1596 $titles = array();
1597 $result = $ilDB->queryF(
1598 "SELECT svy_question.title, svy_qblk_qst.question_fi, svy_qblk_qst.survey_fi FROM " .
1599 "svy_qblk, svy_qblk_qst, svy_question WHERE svy_qblk.questionblock_id = svy_qblk_qst.questionblock_fi AND " .
1600 "svy_question.question_id = svy_qblk_qst.question_fi AND svy_qblk.questionblock_id = %s",
1601 array('integer'),
1602 array($questionblock_id)
1603 );
1604 $survey_id = "";
1605 while ($row = $ilDB->fetchAssoc($result)) {
1606 $titles[$row["question_fi"]] = $row["title"];
1607 $survey_id = $row["survey_fi"];
1608 }
1609 $result = $ilDB->queryF(
1610 "SELECT question_fi, sequence FROM svy_svy_qst WHERE survey_fi = %s ORDER BY sequence",
1611 array('integer'),
1612 array($survey_id)
1613 );
1614 $resultarray = array();
1615 $counter = 1;
1616 while ($row = $ilDB->fetchAssoc($result)) {
1617 if (array_key_exists($row["question_fi"], $titles)) {
1618 $resultarray[$counter++] = $titles[$row["question_fi"]];
1619 }
1620 }
1621 return $resultarray;
1622 }
$counter

◆ getQuestionblocksTable()

ilObjSurvey::getQuestionblocksTable ( array  $arrFilter)

Retrieve data for question block browser.

Todo:
move to survey question manager, use dto

Definition at line 2881 of file class.ilObjSurvey.php.

2883 : array {
2884 $ilDB = $this->db;
2885
2886 $where = "";
2887 if (array_key_exists('title', $arrFilter) && strlen($arrFilter['title'])) {
2888 $where .= " AND " . $ilDB->like('svy_qblk.title', 'text', "%%" . $arrFilter['title'] . "%%");
2889 }
2890
2891 $query_result = $ilDB->query("SELECT svy_qblk.*, svy_svy.obj_fi FROM svy_qblk , svy_qblk_qst, svy_svy WHERE " .
2892 "svy_qblk.questionblock_id = svy_qblk_qst.questionblock_fi AND svy_svy.survey_id = svy_qblk_qst.survey_fi " .
2893 "$where GROUP BY svy_qblk.questionblock_id, svy_qblk.title, svy_qblk.show_questiontext, svy_qblk.show_blocktitle, " .
2894 "svy_qblk.owner_fi, svy_qblk.tstamp, svy_svy.obj_fi");
2895 $rows = array();
2896 if ($query_result->numRows()) {
2897 $survey_ref_ids = ilUtil::_getObjectsByOperations("svy", "write");
2898 $surveytitles = array();
2899 foreach ($survey_ref_ids as $survey_ref_id) {
2900 $survey_id = ilObject::_lookupObjId($survey_ref_id);
2902 }
2903 while ($row = $ilDB->fetchAssoc($query_result)) {
2904 $questions_array = $this->getQuestionblockQuestions($row["questionblock_id"]);
2905 $counter = 1;
2906 foreach ($questions_array as $key => $value) {
2907 $questions_array[$key] = "$counter. $value";
2908 $counter++;
2909 }
2910 if (strlen($surveytitles[$row["obj_fi"]] ?? "")) { // only questionpools which are not in trash
2911 $rows[$row["questionblock_id"]] = array(
2912 "questionblock_id" => $row["questionblock_id"],
2913 "title" => $row["title"],
2914 "svy" => $surveytitles[$row["obj_fi"]],
2915 "contains" => implode(", ", $questions_array),
2916 "owner" => $row["owner_fi"]
2917 );
2918 }
2919 }
2920 }
2921 return $rows;
2922 }
getQuestionblockQuestions(int $questionblock_id)
static _lookupTitle(int $obj_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,...

References $ilDB.

Referenced by ilSurveyQuestionblockbrowserTableGUI\initData().

+ Here is the caller graph for this function:

◆ getQuestionGUI()

ilObjSurvey::getQuestionGUI ( string  $questiontype,
int  $question_id 
)

Definition at line 899 of file class.ilObjSurvey.php.

903 return SurveyQuestionGUI::_getQuestionGUI($questiontype, $question_id);
904 }
Basic class for all survey question types The SurveyQuestionGUI class defines and encapsulates basic ...
static _getQuestionGUI(?string $questiontype, int $question_id=-1)
Creates a question gui representation.

◆ getQuestionpoolTitles()

ilObjSurvey::getQuestionpoolTitles ( bool  $could_be_offline = false,
bool  $showPath = false 
)

Returns the available question pools for the active user.

Returns
array<int, string> keys are obj IDs, values are titles

Definition at line 1354 of file class.ilObjSurvey.php.

1357 : array {
1358 return ilObjSurveyQuestionPool::_getAvailableQuestionpools(true, $could_be_offline, $showPath);
1359 }

◆ getQuestionsTable()

ilObjSurvey::getQuestionsTable ( array  $arrFilter)

Retrieve data for question browser.

Todo:
move to survey question manager, use dto

Definition at line 2819 of file class.ilObjSurvey.php.

2821 : array {
2822 $ilDB = $this->db;
2823 $where = "";
2824 if (array_key_exists('title', $arrFilter) && strlen($arrFilter['title'])) {
2825 $where .= " AND " . $ilDB->like('svy_question.title', 'text', "%%" . $arrFilter['title'] . "%%");
2826 }
2827 if (array_key_exists('description', $arrFilter) && strlen($arrFilter['description'])) {
2828 $where .= " AND " . $ilDB->like('svy_question.description', 'text', "%%" . $arrFilter['description'] . "%%");
2829 }
2830 if (array_key_exists('author', $arrFilter) && strlen($arrFilter['author'])) {
2831 $where .= " AND " . $ilDB->like('svy_question.author', 'text', "%%" . $arrFilter['author'] . "%%");
2832 }
2833 if (array_key_exists('type', $arrFilter) && strlen($arrFilter['type'])) {
2834 $where .= " AND svy_qtype.type_tag = " . $ilDB->quote($arrFilter['type'], 'text');
2835 }
2836 if (array_key_exists('spl', $arrFilter) && strlen($arrFilter['spl'])) {
2837 $where .= " AND svy_question.obj_fi = " . $ilDB->quote($arrFilter['spl'], 'integer');
2838 }
2839
2840 $spls = $this->getAvailableQuestionpools(true, false, false);
2841 $forbidden = " AND " . $ilDB->in('svy_question.obj_fi', array_keys($spls), false, 'integer');
2842 $forbidden .= " AND svy_question.complete = " . $ilDB->quote("1", 'text');
2843 $existing = "";
2844 $existing_questions = $this->getExistingQuestions();
2845 if (count($existing_questions)) {
2846 $existing = " AND " . $ilDB->in('svy_question.question_id', $existing_questions, true, 'integer');
2847 }
2848
2850
2851 $query_result = $ilDB->query("SELECT svy_question.*, svy_qtype.type_tag, svy_qtype.plugin, object_reference.ref_id" .
2852 " FROM svy_question, svy_qtype, object_reference" .
2853 " WHERE svy_question.original_id IS NULL" . $forbidden . $existing .
2854 " AND svy_question.obj_fi = object_reference.obj_id AND svy_question.tstamp > 0" .
2855 " AND svy_question.questiontype_fi = svy_qtype.questiontype_id " . $where);
2856
2857 $rows = array();
2858 if ($query_result->numRows()) {
2859 while ($row = $ilDB->fetchAssoc($query_result)) {
2860 if (array_key_exists('spl_txt', $arrFilter) && strlen($arrFilter['spl_txt'])) {
2861 if (stripos($spls[$row["obj_fi"]], $arrFilter['spl_txt']) === false) {
2862 continue;
2863 }
2864 }
2865
2866 $row['ttype'] = $trans[$row['type_tag']];
2867 if ($row["plugin"]) {
2868 continue;
2869 } else {
2870 $rows[] = $row;
2871 }
2872 }
2873 }
2874 return $rows;
2875 }
getAvailableQuestionpools(bool $use_obj_id=false, bool $could_be_offline=false, bool $showPath=false, string $permission="read")
Returns the available question pools for the active user.
getExistingQuestions()
Gets the question id's of the questions which are already in the survey.

References $ilDB.

Referenced by ilSurveyQuestionbrowserTableGUI\initData().

+ Here is the caller graph for this function:

◆ getQuestionType()

ilObjSurvey::getQuestionType ( int  $question_id)

Definition at line 907 of file class.ilObjSurvey.php.

909 : string {
911 if ($question_id < 1) {
912 return -1;
913 }
914 $result = $ilDB->queryF(
915 "SELECT type_tag FROM svy_question, svy_qtype WHERE svy_question.question_id = %s AND " .
916 "svy_question.questiontype_fi = svy_qtype.questiontype_id",
917 array('integer'),
918 array($question_id)
919 );
920 if ($result->numRows() === 1) {
921 $data = $ilDB->fetchAssoc($result);
922 return $data["type_tag"];
923 } else {
924 return "";
925 }
926 }

◆ getRatersData()

ilObjSurvey::getRatersData ( int  $a_appraisee_id)
Todo:
move to appraisal manager

Definition at line 4564 of file class.ilObjSurvey.php.

4566 : array {
4567 $ilDB = $this->db;
4568
4569 $res = $anonymous_ids = array();
4570
4571 $set = $ilDB->query("SELECT * FROM svy_360_rater" .
4572 " WHERE obj_id = " . $ilDB->quote($this->getSurveyId(), "integer") .
4573 " AND appr_id = " . $ilDB->quote($a_appraisee_id, "integer"));
4574 while ($row = $ilDB->fetchAssoc($set)) {
4575 if ($row["anonymous_id"]) {
4576 $res["a" . $row["anonymous_id"]] = array(
4577 "lastname" => "unknown code " . $row["anonymous_id"],
4578 "sent" => $row["mail_sent"],
4579 "finished" => null
4580 );
4581 $anonymous_ids[] = $row["anonymous_id"];
4582 } else {
4583 $name = ilObjUser::_lookupName($row["user_id"]);
4584 $name["name"] = $name["lastname"] . ", " . $name["firstname"];
4585 $name["user_id"] = "u" . $name["user_id"];
4586 $name["email"] = ilObjUser::_lookupEmail($row["user_id"]);
4587 $name["sent"] = $row["mail_sent"];
4588 $name["finished"] = (bool) $this->is360SurveyStarted($a_appraisee_id, (int) $row["user_id"]);
4589 $res["u" . $row["user_id"]] = $name;
4590 }
4591 }
4592
4593 if (count($anonymous_ids)) {
4594 $data = $this->getSurveyCodesTableData($anonymous_ids);
4595 foreach ($data as $item) {
4596 if (isset($res["a" . $item["id"]])) {
4597 $res["a" . $item["id"]] = array(
4598 "user_id" => "a" . $item["id"],
4599 "lastname" => $item["last_name"],
4600 "firstname" => $item["first_name"],
4601 "name" => $item["last_name"] . ", " . $item["first_name"],
4602 "login" => "",
4603 "email" => $item["email"],
4604 "code" => $item["code"],
4605 "href" => $item["href"],
4606 "sent" => $res["a" . $item["id"]]["sent"],
4607 "finished" => (bool) $this->is360SurveyStarted($a_appraisee_id, 0, $item["code"])
4608 );
4609 }
4610 }
4611 }
4612
4613 return $res;
4614 }
is360SurveyStarted(int $appr_id, int $user_id, ?string $anonymous_code=null)
getSurveyCodesTableData(?array $ids=null, ?string $lang=null)
Fetches the data for the survey codes table.

Referenced by ILIAS\Survey\Evaluation\EvaluationManager\getSelectableRaters().

+ Here is the caller graph for this function:

◆ getReminderEnd()

ilObjSurvey::getReminderEnd ( )

Definition at line 4992 of file class.ilObjSurvey.php.

4992 : ?ilDate
4993 {
4994 return $this->reminder_end;
4995 }

◆ getReminderFrequency()

ilObjSurvey::getReminderFrequency ( )

Definition at line 5002 of file class.ilObjSurvey.php.

5002 : int
5003 {
5005 }

◆ getReminderLastSent()

ilObjSurvey::getReminderLastSent ( )

Definition at line 5022 of file class.ilObjSurvey.php.

5022 : ?string
5023 {
5025 }
string $reminder_last_sent

◆ getReminderMailTemplates()

ilObjSurvey::getReminderMailTemplates ( ?int &  $defaultTemplateId = null)

Definition at line 5548 of file class.ilObjSurvey.php.

5550 : array {
5551 global $DIC;
5552
5553 $res = array();
5554
5555 $templateService = $DIC->mail()->textTemplates();
5556 foreach ($templateService->loadTemplatesForContextId(ilSurveyMailTemplateReminderContext::ID) as $tmpl) {
5557 $res[$tmpl->getTplId()] = $tmpl->getTitle();
5558 if (null !== $defaultTemplateId && $tmpl->isDefault()) {
5559 $defaultTemplateId = $tmpl->getTplId();
5560 }
5561 }
5562
5563 return $res;
5564 }

◆ getReminderStart()

ilObjSurvey::getReminderStart ( )

Definition at line 4982 of file class.ilObjSurvey.php.

4982 : ?ilDate
4983 {
4984 return $this->reminder_start;
4985 }

◆ getReminderStatus()

ilObjSurvey::getReminderStatus ( )

Definition at line 4972 of file class.ilObjSurvey.php.

4972 : bool
4973 {
4975 }

◆ getReminderTarget()

ilObjSurvey::getReminderTarget ( )

Definition at line 5012 of file class.ilObjSurvey.php.

5012 : int
5013 {
5015 }

◆ getReminderTemplate()

ilObjSurvey::getReminderTemplate ( bool  $selectDefault = false)

Definition at line 5035 of file class.ilObjSurvey.php.

5037 : ?int {
5038 if ($selectDefault) {
5039 $defaultTemplateId = 0;
5040 $this->getReminderMailTemplates($defaultTemplateId);
5041
5042 if ($defaultTemplateId > 0) {
5043 return $defaultTemplateId;
5044 }
5045 }
5046
5047 return $this->reminder_tmpl;
5048 }
getReminderMailTemplates(?int &$defaultTemplateId=null)

◆ getSelfEvaluationResults()

ilObjSurvey::getSelfEvaluationResults ( )

Definition at line 5600 of file class.ilObjSurvey.php.

5600 : int
5601 {
5603 }

Referenced by ILIAS\Survey\Evaluation\EvaluationManager\isMultiParticipantsView().

+ Here is the caller graph for this function:

◆ getShowQuestionTitles()

ilObjSurvey::getShowQuestionTitles ( )

Definition at line 1161 of file class.ilObjSurvey.php.

1161 : bool
1162 {
1163 return (bool) $this->display_question_titles;
1164 }
int $display_question_titles

◆ getSkillService()

ilObjSurvey::getSkillService ( )

Definition at line 4854 of file class.ilObjSurvey.php.

4854 : bool
4855 {
4857 }

◆ getStartDate()

ilObjSurvey::getStartDate ( )

Definition at line 1183 of file class.ilObjSurvey.php.

1183 : string
1184 {
1185 return $this->start_date;
1186 }

◆ getSurveyCodesForExport()

ilObjSurvey::getSurveyCodesForExport ( ?array  $a_codes = null,
?array  $a_ids = null 
)

Return a list of survey codes for file export, note: user_key needs to be null to export a record.

Parameters
?string[]$a_codes array of all survey codes that should be exported, if null...
?int[]$a_ids array of anonymous ids that should be exported
Returns
string comma separated list of survey codes an URLs for file export
Todo:
move to code manager
Exceptions
ilDateTimeException

Definition at line 3575 of file class.ilObjSurvey.php.

3578 : string {
3579 $ilDB = $this->db;
3580 $ilUser = $this->user;
3581 $lng = $this->lng;
3582
3583 $sql = "SELECT svy_anonymous.*, svy_finished.state" .
3584 " FROM svy_anonymous" .
3585 " LEFT JOIN svy_finished ON (svy_anonymous.survey_key = svy_finished.anonymous_id)" .
3586 " WHERE svy_anonymous.survey_fi = " . $ilDB->quote($this->getSurveyId(), "integer") .
3587 " AND svy_anonymous.user_key IS NULL";
3588
3589 if ($a_codes) {
3590 $sql .= " AND " . $ilDB->in("svy_anonymous.survey_key", $a_codes, "", "text");
3591 } elseif ($a_ids) {
3592 $sql .= " AND " . $ilDB->in("svy_anonymous.anonymous_id", $a_ids, "", "text");
3593 }
3594
3595 $export = array();
3596
3597 // #14905
3598 $titles = array();
3599 $titles[] = '"' . $lng->txt("survey_code") . '"';
3600 $titles[] = '"' . $lng->txt("email") . '"';
3601 $titles[] = '"' . $lng->txt("lastname") . '"';
3602 $titles[] = '"' . $lng->txt("firstname") . '"';
3603 $titles[] = '"' . $lng->txt("create_date") . '"';
3604 $titles[] = '"' . $lng->txt("used") . '"';
3605 $titles[] = '"' . $lng->txt("mail_sent_short") . '"';
3606 $titles[] = '"' . $lng->txt("survey_code_url") . '"';
3607 $export[] = implode(";", $titles);
3608
3609 $result = $ilDB->query($sql);
3610 $default_lang = $ilUser->getPref("survey_code_language");
3611 while ($row = $ilDB->fetchAssoc($result)) {
3612 $item = array();
3613 $item[] = $row["survey_key"];
3614
3615 if ($row["externaldata"]) {
3616 $ext = unserialize((string) $row["externaldata"], ['allowed_classes' => false]);
3617 $item[] = $ext["email"];
3618 $item[] = $ext["lastname"];
3619 $item[] = $ext["firstname"];
3620 } else {
3621 $item[] = "";
3622 $item[] = "";
3623 $item[] = "";
3624 }
3625
3626 // No relative (today, tomorrow...) dates in export.
3627 $date = new ilDateTime($row['tstamp'], IL_CAL_UNIX);
3628 $item[] = $date->get(IL_CAL_DATETIME);
3629
3630 $item[] = ($this->isSurveyCodeUsed($row["survey_key"])) ? 1 : 0;
3631 $item[] = ($row["sent"]) ? 1 : 0;
3632
3633 $params = array("accesscode" => $row["survey_key"]);
3634 if ($default_lang) {
3635 $params["lang"] = $default_lang;
3636 }
3637 $item[] = ilLink::_getLink($this->getRefId(), "svy", $params);
3638
3639 $export[] = '"' . implode('";"', $item) . '"';
3640 }
3641 return implode("\n", $export);
3642 }
const IL_CAL_UNIX
const IL_CAL_DATETIME
@classDescription Date and time handling
isSurveyCodeUsed(string $code)
if(! $DIC->user() ->getId()||!ilLTIConsumerAccess::hasCustomProviderCreationAccess()) $params
Definition: ltiregstart.php:31

References $ilDB.

◆ getSurveyCodesTableData()

ilObjSurvey::getSurveyCodesTableData ( ?array  $ids = null,
?string  $lang = null 
)

Fetches the data for the survey codes table.

Parameters
?string$lang Language for the survey code URL
Todo:
move to code manager

Definition at line 3649 of file class.ilObjSurvey.php.

3652 : array {
3653 $ilDB = $this->db;
3654
3655 $codes = array();
3656
3657 $sql = "SELECT svy_anonymous.*, svy_finished.state" .
3658 " FROM svy_anonymous" .
3659 " LEFT JOIN svy_finished ON (svy_anonymous.survey_key = svy_finished.anonymous_id)" .
3660 " WHERE svy_anonymous.survey_fi = " . $ilDB->quote($this->getSurveyId(), "integer") /*.
3661 " AND svy_anonymous.user_key IS NULL" */; // #15860
3662
3663 if ($ids) {
3664 $sql .= " AND " . $ilDB->in("svy_anonymous.anonymous_id", $ids, "", "integer");
3665 }
3666
3667 $sql .= " ORDER BY tstamp, survey_key ASC";
3668 $result = $ilDB->query($sql);
3669 if ($result->numRows() > 0) {
3670 while ($row = $ilDB->fetchAssoc($result)) {
3671 $href = "";
3672 $used = false;
3673 if ($this->isSurveyCodeUsed($row["survey_key"])) {
3674 $used = true;
3675 } else {
3676 $params = array("accesscode" => $row["survey_key"]);
3677 if ($lang) {
3678 $params["lang"] = $lang;
3679 }
3680 $href = ilLink::_getLink($this->getRefId(), "svy", $params);
3681 }
3682
3683
3684 $item = array(
3685 'id' => $row["anonymous_id"],
3686 'code' => $row["survey_key"],
3687 'date' => $row["tstamp"],
3688 'used' => $used,
3689 'sent' => $row['sent'],
3690 'href' => $href,
3691 'email' => '',
3692 'last_name' => '',
3693 'first_name' => ''
3694 );
3695
3696 if ($row["externaldata"]) {
3697 $ext = unserialize((string) $row["externaldata"], ['allowed_classes' => false]);
3698 $item['email'] = $ext['email'] ?? "";
3699 $item['last_name'] = $ext['lastname'] ?? "";
3700 $item['first_name'] = $ext['firstname'] ?? "";
3701 }
3702
3703 $codes[] = $item;
3704 }
3705 }
3706 return $codes;
3707 }
$lang
Definition: xapiexit.php:25

◆ getSurveyFinishedIds()

ilObjSurvey::getSurveyFinishedIds ( )

Get run ids.

Todo:
move to run manager
Returns
int[]

Definition at line 2656 of file class.ilObjSurvey.php.

2656 : array
2657 {
2658 $ilDB = $this->db;
2659
2660 $users = array();
2661 $result = $ilDB->queryF(
2662 "SELECT * FROM svy_finished WHERE survey_fi = %s",
2663 array('integer'),
2664 array($this->getSurveyId())
2665 );
2666 if ($result->numRows()) {
2667 while ($row = $ilDB->fetchAssoc($result)) {
2668 $users[] = (int) $row["finished_id"];
2669 }
2670 }
2671 return $users;
2672 }

References $ilDB, and ILIAS\Repository\int().

+ Here is the call graph for this function:

◆ getSurveyId()

ilObjSurvey::getSurveyId ( )

Definition at line 928 of file class.ilObjSurvey.php.

928 : int
929 {
930 return $this->survey_id;
931 }

Referenced by ILIAS\Survey\Code\CodeManager\__construct(), ILIAS\Survey\Execution\RunManager\__construct(), deleteSurveyRecord(), and ilSurveyParticipantsTableGUI\getItems().

+ Here is the caller graph for this function:

◆ getSurveyPages()

ilObjSurvey::getSurveyPages ( )

Returns the survey pages in an array (a page contains one or more questions)

Todo:
move to survey question manager/repo, use dto

Definition at line 1911 of file class.ilObjSurvey.php.

1911 : array
1912 {
1913 $ilDB = $this->db;
1914 // get questionblocks
1915 $all_questions = array();
1916 $result = $ilDB->queryF(
1917 "SELECT svy_question.*, svy_qtype.type_tag, svy_svy_qst.heading FROM " .
1918 "svy_question, svy_qtype, svy_svy_qst WHERE svy_svy_qst.survey_fi = %s AND " .
1919 "svy_svy_qst.question_fi = svy_question.question_id AND svy_question.questiontype_fi = svy_qtype.questiontype_id " .
1920 "ORDER BY svy_svy_qst.sequence",
1921 array('integer'),
1922 array($this->getSurveyId())
1923 );
1924 while ($row = $ilDB->fetchAssoc($result)) {
1925 $all_questions[$row["question_id"]] = $row;
1926 }
1927 // get all questionblocks
1928 $questionblocks = array();
1929 if (count($all_questions)) {
1930 $result = $ilDB->queryF(
1931 "SELECT svy_qblk.*, svy_qblk_qst.question_fi FROM svy_qblk, svy_qblk_qst " .
1932 "WHERE svy_qblk.questionblock_id = svy_qblk_qst.questionblock_fi AND svy_qblk_qst.survey_fi = %s " .
1933 "AND " . $ilDB->in('svy_qblk_qst.question_fi', array_keys($all_questions), false, 'integer'),
1934 array('integer'),
1935 array($this->getSurveyId())
1936 );
1937 while ($row = $ilDB->fetchAssoc($result)) {
1938 $questionblocks[$row['question_fi']] = $row;
1939 }
1940 }
1941
1942 $all_pages = array();
1943 $pageindex = -1;
1944 $currentblock = "";
1945 foreach ($all_questions as $question_id => $row) {
1946 $constraints = array();
1947 if (isset($questionblocks[$question_id])) {
1948 if (!$currentblock or ($currentblock != $questionblocks[$question_id]['questionblock_id'])) {
1949 $pageindex++;
1950 }
1951 $all_questions[$question_id]['page'] = $pageindex;
1952 $all_questions[$question_id]["questionblock_title"] = $questionblocks[$question_id]['title'];
1953 $all_questions[$question_id]["questionblock_id"] = $questionblocks[$question_id]['questionblock_id'];
1954 $all_questions[$question_id]["questionblock_show_questiontext"] = $questionblocks[$question_id]['show_questiontext'];
1955 $all_questions[$question_id]["questionblock_show_blocktitle"] = $questionblocks[$question_id]['show_blocktitle'];
1956 $all_questions[$question_id]["questionblock_compress_view"] = $questionblocks[$question_id]['compress_view'];
1957 $currentblock = $questionblocks[$question_id]['questionblock_id'];
1958 } else {
1959 $pageindex++;
1960 $all_questions[$question_id]['page'] = $pageindex;
1961 $all_questions[$question_id]["questionblock_title"] = "";
1962 $all_questions[$question_id]["questionblock_id"] = "";
1963 $all_questions[$question_id]["questionblock_show_questiontext"] = 1;
1964 $all_questions[$question_id]["questionblock_show_blocktitle"] = 1;
1965 $all_questions[$question_id]["questionblock_compress_view"] = false;
1966 $currentblock = "";
1967 }
1968 $constraints = $this->getConstraints($question_id);
1969 $all_questions[$question_id]["constraints"] = $constraints;
1970 if (!isset($all_pages[$pageindex])) {
1971 $all_pages[$pageindex] = array();
1972 }
1973 $all_pages[$pageindex][] = $all_questions[$question_id];
1974 }
1975 // calculate position percentage for every page
1976 $max = count($all_pages);
1977 $counter = 1;
1978 foreach ($all_pages as $index => $block) {
1979 foreach ($block as $blockindex => $question) {
1980 $all_pages[$index][$blockindex]["position"] = $counter / $max;
1981 }
1982 $counter++;
1983 }
1984
1985 return $all_pages;
1986 }
getConstraints(int $question_id)
Returns the constraints to a given question or questionblock.

References $counter, and $ilDB.

◆ getSurveyParticipants()

ilObjSurvey::getSurveyParticipants ( ?array  $finished_ids = null,
bool  $force_non_anonymous = false,
bool  $include_invites = false 
)
Todo:
move to run/participant manager/repo

Definition at line 451 of file class.ilObjSurvey.php.

455 : array {
457 $sql = "SELECT * FROM svy_finished" .
458 " WHERE survey_fi = " . $ilDB->quote($this->getSurveyId(), "integer");
459 if ($finished_ids) {
460 $sql .= " AND " . $ilDB->in("finished_id", $finished_ids, "", "integer");
461 }
462
463 $result = $ilDB->query($sql);
464 $participants = array();
465 if ($result->numRows() > 0) {
466 while ($row = $ilDB->fetchAssoc($result)) {
467 $userdata = $this->getUserDataFromActiveId($row["finished_id"], $force_non_anonymous);
468 $userdata["finished"] = (bool) $row["state"];
469 $userdata["finished_tstamp"] = $row["tstamp"];
470 $participants[$userdata["sortname"] . $userdata["active_id"]] = $userdata;
471 }
472 }
473 $participant_ids = array_column($participants, "usr_id");
474 if ($include_invites) {
475 foreach ($this->invitation_manager->getAllForSurvey($this->getSurveyId()) as $usr_id) {
476 if (!in_array($usr_id, $participant_ids)) {
477 $name = ilObjUser::_lookupName($usr_id);
478 $participants[$name["lastname"] . "," . $name["firstname"] . $usr_id] = [
479 "fullname" => ilObjUser::_lookupFullname($usr_id),
480 "sortname" => $name["lastname"] . "," . $name["firstname"],
481 "fistname" => $name["firstname"],
482 "lastname" => $name["lastname"],
483 "login" => $name["login"],
484 "gender" => "",
485 "usr_id" => $usr_id,
486 "finished" => false,
487 "finished_tstamp" => 0,
488 "invited" => true
489 ];
490 }
491 }
492 }
493 return $participants;
494 }
return true
static _lookupFullname(int $a_user_id)

References $ilDB.

Referenced by ilSurveyParticipantsTableGUI\getItems(), and ILIAS\Survey\Evaluation\EvaluationManager\getSelectableAppraisees().

+ Here is the caller graph for this function:

◆ getSurveyQuestions()

ilObjSurvey::getSurveyQuestions ( bool  $with_answers = false)

Returns the survey questions and questionblocks in an array.

Todo:
move to survey question manager/repo, use dto

Definition at line 1802 of file class.ilObjSurvey.php.

1804 : array {
1805 $ilDB = $this->db;
1806 // get questionblocks
1807 $all_questions = array();
1808 $result = $ilDB->queryF(
1809 "SELECT svy_qtype.type_tag, svy_qtype.plugin, svy_question.question_id, " .
1810 "svy_svy_qst.heading FROM svy_qtype, svy_question, svy_svy_qst WHERE svy_svy_qst.survey_fi = %s AND " .
1811 "svy_svy_qst.question_fi = svy_question.question_id AND svy_question.questiontype_fi = svy_qtype.questiontype_id " .
1812 "ORDER BY svy_svy_qst.sequence",
1813 array('integer'),
1814 array($this->getSurveyId())
1815 );
1816 while ($row = $ilDB->fetchAssoc($result)) {
1817 $add = true;
1818 if ($row["plugin"]) {
1819 $add = false;
1820 }
1821 if ($add) {
1822 $question = self::_instanciateQuestion($row["question_id"]);
1823 $questionrow = $question->getQuestionDataArray($row["question_id"]);
1824 foreach ($row as $key => $value) {
1825 $questionrow[$key] = $value;
1826 }
1827 $all_questions[$row["question_id"]] = $questionrow;
1828 $all_questions[$row["question_id"]]["usableForPrecondition"] = $question->usableForPrecondition();
1829 $all_questions[$row["question_id"]]["availableRelations"] = $question->getAvailableRelations();
1830 }
1831 }
1832 // get all questionblocks
1833 $questionblocks = array();
1834 if (count($all_questions)) {
1835 $result = $ilDB->queryF(
1836 "SELECT svy_qblk.*, svy_qblk_qst.question_fi FROM svy_qblk, svy_qblk_qst WHERE " .
1837 "svy_qblk.questionblock_id = svy_qblk_qst.questionblock_fi AND svy_qblk_qst.survey_fi = %s " .
1838 "AND " . $ilDB->in('svy_qblk_qst.question_fi', array_keys($all_questions), false, 'integer'),
1839 array('integer'),
1840 array($this->getSurveyId())
1841 );
1842 while ($row = $ilDB->fetchAssoc($result)) {
1843 $questionblocks[$row['question_fi']] = $row;
1844 }
1845 }
1846
1847 foreach ($all_questions as $question_id => $row) {
1848 $constraints = $this->getConstraints($question_id);
1849 if (isset($questionblocks[$question_id])) {
1850 $all_questions[$question_id]["questionblock_title"] = $questionblocks[$question_id]['title'];
1851 $all_questions[$question_id]["questionblock_id"] = $questionblocks[$question_id]['questionblock_id'];
1852 } else {
1853 $all_questions[$question_id]["questionblock_title"] = "";
1854 $all_questions[$question_id]["questionblock_id"] = "";
1855 }
1856 $all_questions[$question_id]["constraints"] = $constraints;
1857 if ($with_answers) {
1858 $answers = array();
1859 $result = $ilDB->queryF(
1860 "SELECT svy_variable.*, svy_category.title FROM svy_variable, svy_category " .
1861 "WHERE svy_variable.question_fi = %s AND svy_variable.category_fi = svy_category.category_id " .
1862 "ORDER BY sequence ASC",
1863 array('integer'),
1864 array($question_id)
1865 );
1866 if ($result->numRows() > 0) {
1867 while ($data = $ilDB->fetchAssoc($result)) {
1868 $answers[] = $data["title"];
1869 }
1870 }
1871 $all_questions[$question_id]["answers"] = $answers;
1872 }
1873 }
1874 return $all_questions;
1875 }
static _instanciateQuestion(int $question_id)
Creates an instance of a question with a given question id.

Referenced by SurveyConstraintsTableGUI\initItems().

+ Here is the caller graph for this function:

◆ getSurveySkippedValue()

static ilObjSurvey::getSurveySkippedValue ( )
static

Definition at line 5532 of file class.ilObjSurvey.php.

5532 : string
5533 {
5534 global $DIC;
5535
5536 $lng = $DIC->language();
5537
5538 // #13541
5539
5540 $surveySetting = new ilSetting("survey");
5541 if (!$surveySetting->get("skipped_is_custom", false)) {
5542 return $lng->txt("skipped");
5543 } else {
5544 return $surveySetting->get("skipped_custom_value", "");
5545 }
5546 }
ILIAS Setting Class.

References $DIC, and $lng.

Referenced by ilSurveyResultsUserTableGUI\fillRow(), and SurveyQuestionEvaluation\getSkippedValue().

+ Here is the caller graph for this function:

◆ getSurveysWithTutorResults()

static ilObjSurvey::getSurveysWithTutorResults ( )
static
Returns
int[]

Definition at line 5608 of file class.ilObjSurvey.php.

5608 : array
5609 {
5610 global $ilDB;
5611
5612 $res = array();
5613
5615
5616
5617 $q = "SELECT obj_fi FROM svy_svy" .
5618 " WHERE tutor_res_cron IS NULL" .
5619 " AND tutor_res_status = " . $ilDB->quote(1, "integer") .
5620 " AND enddate < " . $ilDB->quote(date("Ymd000000"), "text");
5621
5622 if (DEVMODE) {
5623 $q = "SELECT obj_fi FROM svy_svy" .
5624 " WHERE tutor_res_status = " . $ilDB->quote(1, "integer") .
5625 " AND enddate < " . $ilDB->quote(date("Ymd000000"), "text");
5626 }
5627
5628 $set = $ilDB->query($q);
5629
5630 $log->debug($q);
5631
5632 while ($row = $ilDB->fetchAssoc($set)) {
5633 $res[] = (int) $row["obj_fi"];
5634 }
5635
5636 return $res;
5637 }
debug(string $message, array $context=[])
ilLogger $log

References $ilDB, $log, $q, $res, ilLoggerFactory\getLogger(), and ILIAS\Repository\int().

+ Here is the call graph for this function:

◆ getTextblock()

ilObjSurvey::getTextblock ( int  $question_id)
Todo:
move to survey question manager

Definition at line 3409 of file class.ilObjSurvey.php.

3411 : string {
3412 $ilDB = $this->db;
3413 $result = $ilDB->queryF(
3414 "SELECT * FROM svy_svy_qst WHERE question_fi = %s",
3415 array('integer'),
3416 array($question_id)
3417 );
3418 if ($row = $ilDB->fetchAssoc($result)) {
3419 return $row["heading"] ?? "";
3420 } else {
3421 return "";
3422 }
3423 }

◆ getTutorNotificationRecipients()

ilObjSurvey::getTutorNotificationRecipients ( )

Mail being sent to tutors after all participants have finished the survey?

Definition at line 5071 of file class.ilObjSurvey.php.

5071 : array
5072 {
5074 }
array $tutor_ntf_recipients

◆ getTutorNotificationStatus()

ilObjSurvey::getTutorNotificationStatus ( )

Definition at line 5055 of file class.ilObjSurvey.php.

5055 : bool
5056 {
5058 }

◆ getTutorNotificationTarget()

ilObjSurvey::getTutorNotificationTarget ( )

Group that is checked for the "all participants have finished" mail Either a) all members of a parent group/course or b) all users which have been invited (svy_invitation) (= task on dashboard)

Definition at line 5090 of file class.ilObjSurvey.php.

5090 : int
5091 {
5093 }

◆ getTutorResultsRecipients()

ilObjSurvey::getTutorResultsRecipients ( )

Definition at line 5110 of file class.ilObjSurvey.php.

5110 : array
5111 {
5113 }
array $tutor_res_recipients

◆ getTutorResultsStatus()

ilObjSurvey::getTutorResultsStatus ( )

Definition at line 5100 of file class.ilObjSurvey.php.

5100 : bool
5101 {
5103 }

◆ getUserAccessCode()

ilObjSurvey::getUserAccessCode ( int  $user_id)

Returns a survey access code that was saved for a registered user.

Parameters
int$user_idThe database id of the user
Returns
string The survey access code of the user
Todo:
move to code manager

Definition at line 3914 of file class.ilObjSurvey.php.

3914 : string
3915 {
3916 $ilDB = $this->db;
3917 $access_code = "";
3918 $result = $ilDB->queryF(
3919 "SELECT survey_key FROM svy_anonymous WHERE survey_fi = %s AND user_key = %s",
3920 array('integer','text'),
3921 array($this->getSurveyId(), md5($user_id))
3922 );
3923 if ($result->numRows()) {
3924 $row = $ilDB->fetchAssoc($result);
3925 $access_code = $row["survey_key"];
3926 }
3927 return $access_code;
3928 }

References $ilDB, and $user_id.

◆ getUserData()

ilObjSurvey::getUserData ( array  $ids)

Returns a data of all users specified by id list.

Parameters
int[]$idsarray of user id's
Returns
array The user data "usr_id, login, lastname, firstname, clientip" of the users with id as key
Todo:
use user service, remove direct access to usr_data table

Definition at line 4078 of file class.ilObjSurvey.php.

4080 : array {
4081 $ilDB = $this->db;
4082
4083 if (count($ids) === 0) {
4084 return array();
4085 }
4086
4087 $result = $ilDB->query("SELECT usr_id, login, lastname, firstname FROM usr_data WHERE " . $ilDB->in('usr_id', $ids, false, 'integer') . " ORDER BY login");
4088 $result_array = array();
4089 while ($row = $ilDB->fetchAssoc($result)) {
4090 $result_array[$row["usr_id"]] = $row;
4091 }
4092 return $result_array;
4093 }

◆ getUserDataFromActiveId()

ilObjSurvey::getUserDataFromActiveId ( int  $active_id,
bool  $force_non_anonymous = false 
)

Returns run information.

Todo:
move to run manager/repo

Definition at line 2709 of file class.ilObjSurvey.php.

2712 : array {
2713 $ilDB = $this->db;
2714
2715 $surveySetting = new ilSetting("survey");
2716 $use_anonymous_id = $surveySetting->get("use_anonymous_id");
2717 $result = $ilDB->queryF(
2718 "SELECT * FROM svy_finished WHERE finished_id = %s",
2719 array('integer'),
2720 array($active_id)
2721 );
2722 $row = array();
2723 $foundrows = $result->numRows();
2724 if ($foundrows) {
2725 $row = $ilDB->fetchAssoc($result);
2726 }
2727 $name = ($use_anonymous_id) ? $row["anonymous_id"] : $this->lng->txt("anonymous");
2728 $userdata = array(
2729 "fullname" => $name,
2730 "sortname" => $name,
2731 "firstname" => "",
2732 "lastname" => "",
2733 "login" => "",
2734 "gender" => "",
2735 "active_id" => (string) $active_id
2736 );
2737 if ($foundrows) {
2738 if (($row["user_fi"] > 0) &&
2739 (($row["user_fi"] != ANONYMOUS_USER_ID &&
2740 !$this->hasAnonymizedResults() &&
2741 !$this->get360Mode()) || // 360° uses ANONYMIZE_CODE_ALL which is wrong - see ilObjSurveyGUI::afterSave()
2742 $force_non_anonymous)) {
2743 if (ilObjUser::_lookupLogin($row["user_fi"]) === '') {
2744 $userdata["fullname"] = $userdata["sortname"] = $this->lng->txt("deleted_user");
2745 } else {
2746 $user = new ilObjUser($row["user_fi"]);
2747 $userdata['usr_id'] = $row['user_fi'];
2748 $userdata["fullname"] = $user->getFullname();
2749 $gender = $user->getGender();
2750 if (strlen($gender) === 1) {
2751 $gender = $this->lng->txt("gender_$gender");
2752 }
2753 $userdata["gender"] = $gender;
2754 $userdata["firstname"] = $user->getFirstname();
2755 $userdata["lastname"] = $user->getLastname();
2756 $userdata["sortname"] = $user->getLastname() . ", " . $user->getFirstname();
2757 $userdata["login"] = $user->getLogin();
2758 }
2759 }
2760 if ($row["user_fi"] == 0 || $row["user_fi"] == ANONYMOUS_USER_ID) {
2761 $code = $this->code_manager->getByUserKey((string) $row["anonymous_id"]);
2762 if (!is_null($code) && $this->feature_config->usesAppraisees()) {
2763 $userdata["firstname"] = $code->getFirstName();
2764 $userdata["lastname"] = $code->getLastName();
2765 $userdata["sortname"] = $code->getLastName() . ", " . $code->getFirstName();
2766 }
2767 }
2768 }
2769 return $userdata;
2770 }
User class.
getFullname(int $max_strlen=0)
static _lookupLogin(int $a_user_id)

◆ getUserSettings()

ilObjSurvey::getUserSettings ( int  $usr_id,
string  $key 
)

Definition at line 675 of file class.ilObjSurvey.php.

678 : array {
680
681 $result = $ilDB->queryF(
682 "SELECT * FROM svy_settings WHERE usr_id = %s AND keyword = %s",
683 array('integer', 'text'),
684 array($usr_id, $key)
685 );
686 $found = array();
687 if ($result->numRows()) {
688 while ($row = $ilDB->fetchAssoc($result)) {
689 $found[$row['settings_id']] = $row;
690 }
691 }
692 return $found;
693 }

◆ getUserSpecificResults()

ilObjSurvey::getUserSpecificResults ( array  $finished_ids)

Calculates the evaluation data for the user specific results.

Parameters
int[]$finished_ids
Todo:
move to evaluation manager

Definition at line 2679 of file class.ilObjSurvey.php.

2681 : array {
2682 $evaluation = array();
2683
2684 foreach (array_keys($this->getSurveyQuestions()) as $question_id) {
2685 // get question instance
2686 $question_type = SurveyQuestion::_getQuestionType($question_id);
2687 SurveyQuestion::_includeClass($question_type);
2688 $question = new $question_type();
2689 $question->loadFromDb($question_id);
2690
2691 $q_eval = SurveyQuestion::_instanciateQuestionEvaluation($question_id, $finished_ids);
2692 $q_res = $q_eval->getResults();
2693
2694 $data = array();
2695 foreach ($finished_ids as $user_id) {
2696 $data[$user_id] = $q_eval->parseUserSpecificResults($q_res, $user_id);
2697 }
2698
2699 $evaluation[$question_id] = $data;
2700 }
2701
2702 return $evaluation;
2703 }
static _instanciateQuestionEvaluation(int $question_id, ?array $a_finished_ids=null)

References $data, $user_id, SurveyQuestion\_getQuestionType(), SurveyQuestion\_includeClass(), and SurveyQuestion\_instanciateQuestionEvaluation().

+ Here is the call graph for this function:

◆ getUserSurveyExecutionStatus()

ilObjSurvey::getUserSurveyExecutionStatus ( ?string  $a_code = null)

Get current user execution status.

Generates a code in svy_anonymous for logged in raters, if codes are used Generates a code for the anonymous user, if the survey is set to anonymous and no codes are used

Parameters
?string$a_code
Returns
array|null
Todo:
move to run manager

Definition at line 4701 of file class.ilObjSurvey.php.

4703 : ?array {
4704 $ilUser = $this->user;
4705 $ilDB = $this->db;
4706 $user_id = $ilUser->getId();
4707 // code is obligatory?
4708 if (!$this->isAccessibleWithoutCode()) {
4709 if (!$a_code) {
4710 // registered raters do not need code
4711 if ($this->feature_config->usesAppraisees() &&
4713 $this->isRater(0, $user_id)) {
4714 // auto-generate code
4715 $code = $this->data_manager->code("")
4716 ->withUserId($user_id);
4717 $this->code_manager->add($code);
4718 $a_code = $this->code_manager->getByUserId($user_id);
4719 } else {
4720 return null;
4721 }
4722 }
4723 } elseif ($user_id === ANONYMOUS_USER_ID ||
4724 $this->getAnonymize() === self::ANONYMIZE_FREEACCESS) {
4725 // self::ANONYMIZE_FREEACCESS: anonymized, no codes
4726 // or anonymous user when no codes are used
4727 if (!$a_code) {
4728 // auto-generate code
4729 $code = $this->data_manager->code("")
4730 ->withUserId($user_id);
4731 $code_id = $this->code_manager->add($code);
4732 $a_code = $this->code_manager->getByCodeId($code_id);
4733 }
4734 } else {
4735 $a_code = null;
4736 }
4737
4738 $res = array();
4739
4740 // get runs for user id / code
4741 $sql = "SELECT * FROM svy_finished" .
4742 " WHERE survey_fi = " . $ilDB->quote($this->getSurveyId(), "integer");
4743 // if proper user id is given, use it or current code
4744 if ($user_id !== ANONYMOUS_USER_ID) {
4745 $sql .= " AND (user_fi = " . $ilDB->quote($user_id, "integer") .
4746 " OR anonymous_id = " . $ilDB->quote($a_code, "text") . ")";
4747 }
4748 // use anonymous code to find finished id(s)
4749 else {
4750 $sql .= " AND anonymous_id = " . $ilDB->quote($a_code, "text");
4751 }
4752 $set = $ilDB->query($sql);
4753 while ($row = $ilDB->fetchAssoc($set)) {
4754 $res[$row["finished_id"]] = array("appr_id" => $row["appr_id"],
4755 "user_id" => $row["user_fi"],
4756 "code" => $row["anonymous_id"],
4757 "finished" => (bool) $row["state"]);
4758 }
4759 return array("code" => $a_code, "runs" => $res);
4760 }

References $user_id, and ANONYMOUS_USER_ID.

◆ getVariables()

ilObjSurvey::getVariables ( int  $question_id)

Returns all variables (answer options/scale values) of a question.

Todo:
move to (pool?) question manager/repo

Definition at line 2133 of file class.ilObjSurvey.php.

2135 : array {
2136 $ilDB = $this->db;
2137
2138 $result_array = array();
2139 $result = $ilDB->queryF(
2140 "SELECT svy_variable.*, svy_category.title FROM svy_variable LEFT JOIN " .
2141 "svy_category ON svy_variable.category_fi = svy_category.category_id WHERE svy_variable.question_fi = %s " .
2142 "ORDER BY svy_variable.sequence",
2143 array('integer'),
2144 array($question_id)
2145 );
2146 while ($row = $ilDB->fetchObject($result)) {
2147 $result_array[$row->sequence] = $row;
2148 }
2149 return $result_array;
2150 }

◆ getWorkingtimeForParticipant()

ilObjSurvey::getWorkingtimeForParticipant ( int  $finished_id)
Todo:
move to run manager?

Definition at line 4146 of file class.ilObjSurvey.php.

4148 : int {
4149 $ilDB = $this->db;
4150
4151 $result = $ilDB->queryF(
4152 "SELECT * FROM svy_times WHERE finished_fi = %s",
4153 array('integer'),
4154 array($finished_id)
4155 );
4156 $total = 0;
4157 while ($row = $ilDB->fetchAssoc($result)) {
4158 if ($row['left_page'] > 0 && $row['entered_page'] > 0) {
4159 $total += $row['left_page'] - $row['entered_page'];
4160 }
4161 }
4162 return $total;
4163 }

◆ hasAnonymizedResults()

ilObjSurvey::hasAnonymizedResults ( )

Definition at line 975 of file class.ilObjSurvey.php.

975 : bool
976 {
977 return ($this->getAnonymize() === self::ANONYMIZE_ON ||
978 $this->getAnonymize() === self::ANONYMIZE_FREEACCESS);
979 }

◆ hasAnonymousUserList()

ilObjSurvey::hasAnonymousUserList ( )

Definition at line 5527 of file class.ilObjSurvey.php.

5527 : bool
5528 {
5529 return $this->anon_user_list;
5530 }

◆ hasEnded()

ilObjSurvey::hasEnded ( )

Definition at line 1248 of file class.ilObjSurvey.php.

1248 : bool
1249 {
1250 $end = $this->getEndDate();
1251 if ($end) {
1253 return ($end_date->get(IL_CAL_UNIX) < time());
1254 }
1255 return false;
1256 }
const IL_CAL_TIMESTAMP

References IL_CAL_TIMESTAMP, and IL_CAL_UNIX.

◆ hasMailConfirmation()

ilObjSurvey::hasMailConfirmation ( )

Definition at line 5517 of file class.ilObjSurvey.php.

5517 : bool
5518 {
5520 }

◆ hasMailOwnResults()

ilObjSurvey::hasMailOwnResults ( )

Definition at line 5507 of file class.ilObjSurvey.php.

5507 : bool
5508 {
5510 }

◆ hasQuestions()

ilObjSurvey::hasQuestions ( )

Definition at line 505 of file class.ilObjSurvey.php.

505 : bool
506 {
507 return count($this->questions);
508 }

◆ hasStarted()

ilObjSurvey::hasStarted ( )

Definition at line 1238 of file class.ilObjSurvey.php.

1238 : bool
1239 {
1240 $start = $this->getStartDate();
1241 if ($start) {
1243 return ($start_date->get(IL_CAL_UNIX) < time());
1244 }
1245 return true;
1246 }

References IL_CAL_TIMESTAMP, and IL_CAL_UNIX.

◆ hasViewOwnResults()

ilObjSurvey::hasViewOwnResults ( )

Definition at line 5497 of file class.ilObjSurvey.php.

5497 : bool
5498 {
5500 }

◆ importObject()

ilObjSurvey::importObject ( array  $file_info,
int  $svy_qpl_id 
)
Exceptions
ilException
ilImportException
ilInvalidSurveyImportFileException
Returns
string error
Todo:
move to export sub-service

Definition at line 3164 of file class.ilObjSurvey.php.

3167 : string {
3168 if ($svy_qpl_id < 1) {
3169 $svy_qpl_id = -1;
3170 }
3171 // check if file was uploaded
3172 $source = $file_info["tmp_name"];
3173 $error = "";
3174 if (($source === 'none') || (!$source) || $file_info["error"] > UPLOAD_ERR_OK) {
3175 $error = $this->lng->txt("import_no_file_selected");
3176 }
3177 // check correct file type
3178 $isXml = false;
3179 $isZip = false;
3180 if ((strcmp($file_info["type"], "text/xml") === 0) || (strcmp($file_info["type"], "application/xml") === 0)) {
3181 $this->svy_log->debug("isXML");
3182 $isXml = true;
3183 }
3184 // too many different mime-types, so we use the suffix
3185 $suffix = pathinfo($file_info["name"]);
3186 if (strcmp(strtolower($suffix["extension"]), "zip") === 0) {
3187 $this->svy_log->debug("isZip");
3188 $isZip = true;
3189 }
3190 if (!$isXml && !$isZip) {
3191 $error = $this->lng->txt("import_wrong_file_type");
3192 $this->svy_log->debug("Survey: Import error. Filetype was \"" . $file_info["type"] . "\"");
3193 }
3194 if ($error === '') {
3195 // import file as a survey
3196 $import_dir = $this->getImportDirectory();
3197 $import_subdir = "";
3198 $importfile = "";
3199 if ($isZip) {
3200 $importfile = $import_dir . "/" . $file_info["name"];
3201 ilFileUtils::moveUploadedFile($source, $file_info["name"], $importfile);
3202 $this->domain->resources()->zip()->unzipFile($importfile);
3203 $found = $this->locateImportFiles($import_dir);
3204 if (!((strlen($found["dir"]) > 0) && (strlen($found["xml"]) > 0))) {
3205 $error = $this->lng->txt("wrong_import_file_structure");
3206 return $error;
3207 }
3208 $importfile = $found["xml"];
3209 $import_subdir = $found["dir"];
3210 } else {
3211 $importfile = tempnam($import_dir, "survey_import");
3212 ilFileUtils::moveUploadedFile($source, $file_info["name"], $importfile);
3213 }
3214
3215 $this->svy_log->debug("Import file = $importfile");
3216 $this->svy_log->debug("Import subdir = $import_subdir");
3217
3218 $fh = fopen($importfile, 'rb');
3219 if (!$fh) {
3220 $error = $this->lng->txt("import_error_opening_file");
3221 return $error;
3222 }
3223 $xml = fread($fh, filesize($importfile));
3224 $result = fclose($fh);
3225 if (!$result) {
3226 $error = $this->lng->txt("import_error_closing_file");
3227 return $error;
3228 }
3229
3230 $this->import_manager->clearMobs();
3231 if (strpos($xml, "questestinterop")) {
3232 throw new ilInvalidSurveyImportFileException("Unsupported survey version (< 3.8) found.");
3233 } else {
3234 $this->svy_log->debug("survey id = " . $this->getId());
3235 $this->svy_log->debug("question pool id = " . $svy_qpl_id);
3236
3237 $imp = new ilImport();
3238 $config = $imp->getConfig("components/ILIAS/Survey");
3239 $config->setQuestionPoolID($svy_qpl_id);
3240 $imp->getMapping()->addMapping("components/ILIAS/Survey", "svy", 0, $this->getId());
3241 $imp->importFromDirectory($import_subdir, "svy", "components/ILIAS/Survey");
3242 $this->svy_log->debug("config(Modules/survey)->getQuestionPoolId =" . $config->getQuestionPoolID());
3243 }
3244 }
3245 return $error;
3246 }
static moveUploadedFile(string $a_file, string $a_name, string $a_target, bool $a_raise_errors=true, string $a_mode="move_uploaded")
move uploaded file
Import class.
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
locateImportFiles(string $a_dir)
Locates the import directory and the xml file in a directory with an unzipped import file.
ilErrorHandling $error

◆ importSurveyCode()

ilObjSurvey::importSurveyCode ( string  $a_anonymize_key,
int  $a_created,
array  $a_data 
)
Todo:
move to code manager

Definition at line 3742 of file class.ilObjSurvey.php.

3746 : void {
3747 $ilDB = $this->db;
3748
3749 $next_id = $ilDB->nextId('svy_anonymous');
3750 $ilDB->manipulateF(
3751 "INSERT INTO svy_anonymous (anonymous_id, survey_key, survey_fi, externaldata, tstamp) " .
3752 "VALUES (%s, %s, %s, %s, %s)",
3753 array('integer','text','integer','text','integer'),
3754 array($next_id, $a_anonymize_key, $this->getSurveyId(), serialize($a_data), $a_created)
3755 );
3756 }

◆ initServices()

ilObjSurvey::initServices ( )
protected

Definition at line 194 of file class.ilObjSurvey.php.

194 : void
195 {
196 if ($this->getRefId() > 0) {
197 $this->code_manager = $this
198 ->survey_service
199 ->domain()
200 ->code($this, $this->user->getId());
201 }
202 $this->feature_config = $this
203 ->survey_service
204 ->domain()
205 ->modeFeatureConfig($this->getMode());
206
207 $this->data_manager = $this
208 ->survey_service
209 ->data();
210 }

References getMode(), ilObject\getRefId(), and ILIAS\Repository\user().

Referenced by __construct(), and read().

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

◆ insertQuestion()

ilObjSurvey::insertQuestion ( int  $question_id)

Inserts a question in the survey and saves the relation to the database.

Todo:
move to survey question manager/repo

Definition at line 550 of file class.ilObjSurvey.php.

552 : bool {
554
555 $this->svy_log->debug("insert question, id:" . $question_id);
556
557 if (!SurveyQuestion::_isComplete($question_id)) {
558 $this->svy_log->debug("question is not complete");
559 return false;
560 } else {
561 // get maximum sequence index in test
562 $result = $ilDB->queryF(
563 "SELECT survey_question_id FROM svy_svy_qst WHERE survey_fi = %s",
564 array('integer'),
565 array($this->getSurveyId())
566 );
567 $sequence = $result->numRows();
568 $duplicate_id = $this->duplicateQuestionForSurvey($question_id);
569 $this->svy_log->debug("duplicate, id: " . $question_id . ", duplicate id: " . $duplicate_id);
570
571 // check if question is not already in the survey, see #22018
572 if ($this->isQuestionInSurvey($duplicate_id)) {
573 return false;
574 }
575
576 $next_id = $ilDB->nextId('svy_svy_qst');
577 $affectedRows = $ilDB->manipulateF(
578 "INSERT INTO svy_svy_qst (survey_question_id, survey_fi, question_fi, sequence, tstamp) VALUES (%s, %s, %s, %s, %s)",
579 array('integer', 'integer', 'integer', 'integer', 'integer'),
580 array($next_id, $this->getSurveyId(), $duplicate_id, $sequence, time())
581 );
582
583 $this->svy_log->debug("added entry to svy_svy_qst, id: " . $next_id . ", question id: " . $duplicate_id . ", sequence: " . $sequence);
584
585 $this->loadQuestionsFromDb();
586 $this->saveCompletionStatus();
587 return true;
588 }
589 }
static _isComplete(int $question_id)
Checks whether the question is complete or not.
isQuestionInSurvey(int $a_question_fi)
saveCompletionStatus()
Saves the completion status of the survey.
duplicateQuestionForSurvey(int $question_id, bool $a_force=false)
Takes a question and creates a copy of the question for use in the survey.

◆ insertQuestionblock()

ilObjSurvey::insertQuestionblock ( int  $questionblock_id)

Definition at line 609 of file class.ilObjSurvey.php.

611 : void {
612
613 $sequence_manager = $this->survey_service->domain()->sequence(
614 $this->getSurveyId(),
615 $this
616 );
617
619 $result = $ilDB->queryF(
620 "SELECT svy_qblk.title, svy_qblk.show_questiontext, svy_qblk.show_blocktitle," .
621 " svy_qblk_qst.question_fi FROM svy_qblk, svy_qblk_qst, svy_svy_qst" .
622 " WHERE svy_qblk.questionblock_id = svy_qblk_qst.questionblock_fi" .
623 " AND svy_svy_qst.question_fi = svy_qblk_qst.question_fi" .
624 " AND svy_qblk.questionblock_id = %s" .
625 " ORDER BY svy_svy_qst.sequence",
626 array('integer'),
627 array($questionblock_id)
628 );
629 $questions = array();
630 $show_questiontext = false;
631 $show_blocktitle = false;
632 $title = "";
633 while ($row = $ilDB->fetchAssoc($result)) {
634 //$duplicate_id = $this->duplicateQuestionForSurvey($row["question_fi"]);
635 $duplicate_id = $sequence_manager->appendQuestion($row["question_fi"], true);
636 $questions[] = $duplicate_id;
637 $title = (string) $row["title"];
638 $show_questiontext = (bool) $row["show_questiontext"];
639 $show_blocktitle = (bool) $row["show_blocktitle"];
640 }
641 $this->createQuestionblock($title, $show_questiontext, $show_blocktitle, $questions);
642 }
createQuestionblock(string $title, bool $show_questiontext, bool $show_blocktitle, array $questions, bool $compress_view=false)

◆ is360SurveyStarted()

ilObjSurvey::is360SurveyStarted ( int  $appr_id,
int  $user_id,
?string  $anonymous_code = null 
)
Todo:
move to appraisal manager

Definition at line 4669 of file class.ilObjSurvey.php.

4673 : ?int {
4674 $ilDB = $this->db;
4675
4676 $sql = "SELECT * FROM svy_finished" .
4677 " WHERE survey_fi =" . $ilDB->quote($this->getSurveyId(), "integer") .
4678 " AND appr_id = " . $ilDB->quote($appr_id, "integer");
4679 if ($user_id) {
4680 $sql .= " AND user_fi = " . $ilDB->quote($user_id, "integer");
4681 } else {
4682 $sql .= " AND anonymous_id = " . $ilDB->quote($anonymous_code, "text");
4683 }
4684 $result = $ilDB->query($sql);
4685 if ($result->numRows() === 0) {
4686 return null;
4687 } else {
4688 $row = $ilDB->fetchAssoc($result);
4689 return (int) $row["state"];
4690 }
4691 }

References $ilDB, and $user_id.

◆ isAccessibleWithoutCode()

ilObjSurvey::isAccessibleWithoutCode ( )

Definition at line 968 of file class.ilObjSurvey.php.

968 : bool
969 {
970 return ($this->getAnonymize() === self::ANONYMIZE_OFF ||
971 $this->getAnonymize() === self::ANONYMIZE_FREEACCESS);
972 }

◆ isActivationLimited()

ilObjSurvey::isActivationLimited ( )

Definition at line 1308 of file class.ilObjSurvey.php.

1308 : bool
1309 {
1311 }

◆ isAnonymizedParticipant()

ilObjSurvey::isAnonymizedParticipant ( string  $key)
Parameters
string$key(access code)
Todo:
move to participant manager

Definition at line 3554 of file class.ilObjSurvey.php.

3554 : bool
3555 {
3556 $ilDB = $this->db;
3557
3558 $result = $ilDB->queryF(
3559 "SELECT finished_id FROM svy_finished WHERE anonymous_id = %s AND survey_fi = %s",
3560 array('text','integer'),
3561 array($key, $this->getSurveyId())
3562 );
3563 return $result->numRows() === 1;
3564 }

References $ilDB.

◆ isAppraisee()

ilObjSurvey::isAppraisee ( int  $a_user_id)
Todo:
move to appraisal manager

Definition at line 4392 of file class.ilObjSurvey.php.

4394 : bool {
4395 $ilDB = $this->db;
4396 $set = $ilDB->query("SELECT user_id" .
4397 " FROM svy_360_appr" .
4398 " WHERE obj_id = " . $ilDB->quote($this->getSurveyId(), "integer") .
4399 " AND user_id = " . $ilDB->quote($a_user_id, "integer"));
4400 return (bool) $ilDB->numRows($set);
4401 }

Referenced by ILIAS\Survey\Participants\StatusManager\canAddItselfAsAppraisee(), and ILIAS\Survey\Participants\StatusManager\isAppraisee().

+ Here is the caller graph for this function:

◆ isAppraiseeClosed()

ilObjSurvey::isAppraiseeClosed ( int  $a_user_id)
Todo:
move to appraisal manager

Definition at line 4406 of file class.ilObjSurvey.php.

4408 : bool {
4409 $ilDB = $this->db;
4410
4411 $set = $ilDB->query("SELECT has_closed" .
4412 " FROM svy_360_appr" .
4413 " WHERE obj_id = " . $ilDB->quote($this->getSurveyId(), "integer") .
4414 " AND user_id = " . $ilDB->quote($a_user_id, "integer"));
4415 $row = $ilDB->fetchAssoc($set);
4416 return (bool) ($row["has_closed"] ?? false);
4417 }

◆ isComplete()

ilObjSurvey::isComplete ( )

Check if survey is complete for use.

Todo:
move to survey manager

Definition at line 500 of file class.ilObjSurvey.php.

500 : bool
501 {
502 return ($this->getTitle() && count($this->questions));
503 }

References ILIAS\GlobalScreen\Scope\Footer\Factory\getTitle().

+ Here is the call graph for this function:

◆ isHTML()

ilObjSurvey::isHTML ( string  $a_text)

Checks if a given string contains HTML or not.

Todo:
move to export sub-service

Definition at line 3997 of file class.ilObjSurvey.php.

3999 : bool {
4000 if (preg_match("/<[^>]*?>/", $a_text)) {
4001 return true;
4002 } else {
4003 return false;
4004 }
4005 }

◆ isQuestionInAnyBlock()

ilObjSurvey::isQuestionInAnyBlock ( int  $a_question_fi)
Todo:
move to survey question manager/repo

Definition at line 1570 of file class.ilObjSurvey.php.

1572 : bool {
1573 global $DIC;
1574
1575 $ilDB = $DIC->database();
1576
1577 $set = $ilDB->query("SELECT * FROM svy_qblk_qst " .
1578 " WHERE survey_fi = " . $ilDB->quote($this->getSurveyId(), "integer") .
1579 " AND question_fi = " . $ilDB->quote($a_question_fi, "integer"));
1580 if ($rec = $ilDB->fetchAssoc($set)) {
1581 return true;
1582 }
1583 return false;
1584 }

◆ isQuestionInSurvey()

ilObjSurvey::isQuestionInSurvey ( int  $a_question_fi)

Definition at line 592 of file class.ilObjSurvey.php.

594 : bool {
595 global $DIC;
596 //return false;
597 $ilDB = $DIC->database();
598
599 $set = $ilDB->query("SELECT * FROM svy_svy_qst " .
600 " WHERE survey_fi = " . $ilDB->quote($this->getSurveyId(), "integer") .
601 " AND question_fi = " . $ilDB->quote($a_question_fi, "integer"));
602 if ($rec = $ilDB->fetchAssoc($set)) {
603 return true;
604 }
605 return false;
606 }

◆ isRater()

ilObjSurvey::isRater ( int  $a_appraisee_id,
int  $a_user_id,
int  $a_anonymous_id = 0 
)
Todo:
move to appraisal manager

Definition at line 4511 of file class.ilObjSurvey.php.

4515 : bool {
4516 $ilDB = $this->db;
4517
4518 // user is rater if already appraisee and active self-evaluation
4519 if ($this->isAppraisee($a_user_id) &&
4520 $this->get360SelfEvaluation() &&
4521 (!$a_appraisee_id || $a_appraisee_id === $a_user_id)) {
4522 return true;
4523 }
4524
4525 // :TODO: should we get rid of code as well?
4526
4527 $sql = "SELECT user_id" .
4528 " FROM svy_360_rater" .
4529 " WHERE obj_id = " . $ilDB->quote($this->getSurveyId(), "integer") .
4530 " AND user_id = " . $ilDB->quote($a_user_id, "integer") .
4531 " AND anonymous_id = " . $ilDB->quote($a_anonymous_id, "integer");
4532 if ($a_appraisee_id) {
4533 $sql .= " AND appr_id = " . $ilDB->quote($a_appraisee_id, "integer");
4534 }
4535 $set = $ilDB->query($sql);
4536 return (bool) $ilDB->numRows($set);
4537 }

◆ isSurveyCodeUnique()

ilObjSurvey::isSurveyCodeUnique ( string  $code)
Todo:
move to code manager

Definition at line 3727 of file class.ilObjSurvey.php.

3729 : bool {
3730 $ilDB = $this->db;
3731 $result = $ilDB->queryF(
3732 "SELECT anonymous_id FROM svy_anonymous WHERE survey_fi = %s AND survey_key = %s",
3733 array('integer','text'),
3734 array($this->getSurveyId(), $code)
3735 );
3736 return !(($result->numRows() > 0));
3737 }

◆ isSurveyCodeUsed()

ilObjSurvey::isSurveyCodeUsed ( string  $code)
Todo:
move to code manager

Definition at line 3712 of file class.ilObjSurvey.php.

3714 : bool {
3715 $ilDB = $this->db;
3716 $result = $ilDB->queryF(
3717 "SELECT finished_id FROM svy_finished WHERE survey_fi = %s AND anonymous_id = %s",
3718 array('integer','text'),
3719 array($this->getSurveyId(), $code)
3720 );
3721 return $result->numRows() > 0;
3722 }

◆ isSurveyFinishedByCode()

ilObjSurvey::isSurveyFinishedByCode ( string  $a_code)

Get if survey is finished for a specific anonymous user code.

Parameters
string$a_codeanonymous user code
Returns
bool
Todo:
move to run manager

Definition at line 3878 of file class.ilObjSurvey.php.

3878 : bool
3879 {
3880 $result = $this->db->queryF(
3881 "SELECT state FROM svy_finished WHERE survey_fi = %s AND anonymous_id = %s",
3882 array('integer','text'),
3883 array($this->getSurveyId(), $a_code)
3884 );
3885
3886 $row = $this->db->fetchAssoc($result);
3887
3888 return $row['state'] ?? false;
3889 }

◆ isUnusedCode()

ilObjSurvey::isUnusedCode ( string  $a_code,
int  $a_user_id 
)
Todo:
move to code manager

Definition at line 4783 of file class.ilObjSurvey.php.

4786 : bool {
4787 $ilDB = $this->db;
4788
4789 $set = $ilDB->query("SELECT user_fi FROM svy_finished" .
4790 " WHERE survey_fi = " . $ilDB->quote($this->getSurveyId(), "integer") .
4791 " AND anonymous_id = " . $ilDB->quote($a_code, "text"));
4792 $user_id = $ilDB->fetchAssoc($set);
4793 $user_id = (int) $user_id["user_fi"];
4794
4795 if ($user_id && ($user_id !== $a_user_id || $user_id === ANONYMOUS_USER_ID)) {
4796 return false;
4797 }
4798 return true;
4799 }

◆ loadFromDb()

ilObjSurvey::loadFromDb ( )

Definition at line 981 of file class.ilObjSurvey.php.

981 : void
982 {
984 $result = $ilDB->queryF(
985 "SELECT * FROM svy_svy WHERE obj_fi = %s",
986 array('integer'),
987 array($this->getId())
988 );
989 if ($result->numRows() === 1) {
990 $data = $ilDB->fetchAssoc($result);
991 $this->setSurveyId($data["survey_id"]);
992 $this->setAuthor($data["author"] ?? "");
993 $this->setIntroduction(ilRTE::_replaceMediaObjectImageSrc((string) $data["introduction"], 1));
994 if ($data["outro"] === "survey_finished") {
995 $this->setOutro($this->lng->txt("survey_finished"));
996 } else {
997 $this->setOutro(ilRTE::_replaceMediaObjectImageSrc((string) $data["outro"], 1));
998 }
999 $this->setShowQuestionTitles((bool) $data["show_question_titles"]);
1000 $this->setStartDate((string) ($data["startdate"] ?? ""));
1001 $this->setEndDate((string) ($data["enddate"] ?? ""));
1002 $this->setAnonymize((int) $data["anonymize"]);
1003 $this->setEvaluationAccess($data["evaluation_access"] ?? "");
1004 $this->loadQuestionsFromDb();
1005 $this->setMailNotification((bool) $data['mailnotification']);
1006 $this->setMailAddresses((string) $data['mailaddresses']);
1007 $this->setMailParticipantData((string) $data['mailparticipantdata']);
1008 $this->setPoolUsage((bool) $data['pool_usage']);
1009 // Mode
1010 $this->setMode($data['mode']);
1011 // 360°
1012 $this->set360SelfEvaluation((bool) $data['mode_360_self_eval']);
1013 $this->set360SelfRaters((bool) $data['mode_360_self_rate']);
1014 $this->set360SelfAppraisee((bool) $data['mode_360_self_appr']);
1015 $this->set360Results((int) $data['mode_360_results']);
1016 // Mode self evaluated
1017 $this->setSelfEvaluationResults((int) $data['mode_self_eval_results']);
1018 // Competences
1019 $this->setSkillService((bool) $data['mode_skill_service']);
1020 // reminder/notification
1021 $this->setReminderStatus((bool) $data["reminder_status"]);
1022 $this->setReminderStart($data["reminder_start"] ? new ilDate($data["reminder_start"], IL_CAL_DATE) : null);
1023 $this->setReminderEnd($data["reminder_end"] ? new ilDate($data["reminder_end"], IL_CAL_DATE) : null);
1024 $this->setReminderFrequency((int) $data["reminder_frequency"]);
1025 $this->setReminderTarget((int) $data["reminder_target"]);
1026 $this->setReminderLastSent((string) $data["reminder_last_sent"]);
1027 $this->setReminderTemplate((int) $data["reminder_tmpl"]);
1028 $this->setTutorNotificationStatus($data["tutor_ntf_status"]);
1029 $this->setTutorNotificationRecipients(explode(";", $data["tutor_ntf_reci"] ?? ""));
1030 $this->setTutorNotificationTarget($data["tutor_ntf_target"]);
1031 $this->setTutorResultsStatus((bool) $data["tutor_res_status"]);
1032 $this->setTutorResultsRecipients(explode(";", $data["tutor_res_reci"] ?? ""));
1033
1034 $this->setMailOwnResults((bool) $data["own_results_mail"]);
1035 $this->setMailConfirmation((bool) $data["confirmation_mail"]);
1036 $this->setCalculateSumScore((bool) $data["calculate_sum_score"]);
1037
1038 $this->setAnonymousUserList((bool) $data["anon_user_list"]);
1039 }
1040
1041 // moved activation to ilObjectActivation
1042 if (isset($this->ref_id) && $this->ref_id !== 0) {
1043 $activation = ilObjectActivation::getItem($this->ref_id);
1044 switch ($activation["timing_type"]) {
1046 $this->setActivationLimited(true);
1047 $this->setActivationStartDate($activation["timing_start"]);
1048 $this->setActivationEndDate($activation["timing_end"]);
1049 $this->setActivationVisibility($activation["visible"]);
1050 break;
1051
1052 default:
1053 $this->setActivationLimited(false);
1054 break;
1055 }
1056 }
1057 }
set360SelfAppraisee(bool $a_value)
setMode(int $a_value)
setAnonymousUserList(bool $a_value)
setReminderStatus(bool $a_value)
setSelfEvaluationResults(int $a_value)
setTutorNotificationStatus(bool $a_value)
Activates mail being sent to tutors after all participants have finished the survey.
set360Results(int $a_value)
setSurveyId(int $survey_id)
setOutro(string $outro="")
setTutorResultsRecipients(array $a_value)
setReminderTemplate(?int $a_value)
setSkillService(bool $a_val)
setActivationEndDate(?int $ending_time=null)
setIntroduction(string $introduction="")
setEndDate(string $end_date="")
setStartDate(string $start_date="")
setReminderFrequency(int $a_value)
setShowQuestionTitles(bool $a_show)
setActivationStartDate(?int $starting_time=null)
setTutorResultsStatus(bool $a_value)
setActivationVisibility(bool $a_value)
setMailNotification(bool $a_notification)
Activate mail to tutors each time a participant finishes the survey.
setTutorNotificationRecipients(array $a_value)
Set tutor recipients for "all participants have finished" mail.
setReminderTarget(int $a_value)
setMailParticipantData(string $a_data)
Set preceding text (incl.
setCalculateSumScore(bool $a_val)
setTutorNotificationTarget(int $a_value)
setEvaluationAccess(string $evaluation_access=self::EVALUATION_ACCESS_OFF)
setMailConfirmation(bool $a_value)
setReminderStart(?ilDate $a_value=null)
setReminderEnd(?ilDate $a_value=null)
setAnonymize(int $a_anonymize)
set anonymize status
set360SelfRaters(bool $a_value)
setMailAddresses(string $a_addresses)
Set (Tutor) Recipients of "single participant has finished" mails.
setActivationLimited(bool $a_value)
setPoolUsage(bool $a_value)
setMailOwnResults(bool $a_value)
set360SelfEvaluation(bool $a_value)
setAuthor(string $author="")

References $data, $ilDB, ilRTE\_replaceMediaObjectImageSrc(), ILIAS\Survey\Mode\getId(), ilObjectActivation\getItem(), IL_CAL_DATE, ILIAS\Repository\lng(), and ilObjectActivation\TIMINGS_ACTIVATION.

Referenced by read().

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

◆ loadQuestionsFromDb()

ilObjSurvey::loadQuestionsFromDb ( )

Definition at line 1059 of file class.ilObjSurvey.php.

1059 : void
1060 {
1061 $ilDB = $this->db;
1062 $this->questions = array();
1063 $result = $ilDB->queryF(
1064 "SELECT * FROM svy_svy_qst WHERE survey_fi = %s ORDER BY sequence",
1065 array('integer'),
1066 array($this->getSurveyId())
1067 );
1068 while ($data = $ilDB->fetchAssoc($result)) {
1069 $this->questions[$data["sequence"]] = $data["question_fi"];
1070 }
1071 }

References $data, and $ilDB.

◆ loadWorkingData()

ilObjSurvey::loadWorkingData ( int  $question_id,
int  $active_id 
)

Gets the given answer data of a question in a run.

Todo:
move to run(?) manager/repo

Definition at line 2293 of file class.ilObjSurvey.php.

2296 : array {
2297 $ilDB = $this->db;
2298 $result_array = array();
2299 $result = $ilDB->queryF(
2300 "SELECT * FROM svy_answer WHERE question_fi = %s AND active_fi = %s",
2301 array('integer','integer'),
2302 array($question_id, $active_id)
2303 );
2304 if ($result->numRows() >= 1) {
2305 while ($row = $ilDB->fetchAssoc($result)) {
2306 $result_array[] = $row;
2307 }
2308 }
2309 return $result_array;
2310 }

◆ locateImportFiles()

ilObjSurvey::locateImportFiles ( string  $a_dir)

Locates the import directory and the xml file in a directory with an unzipped import file.

Returns
array An associative array containing "dir" (import directory) and "xml" (xml file)
Todo:
move to export sub-service

Definition at line 3115 of file class.ilObjSurvey.php.

3117 : ?array {
3118 if (!is_dir($a_dir) || is_int(strpos($a_dir, ".."))) {
3119 return null;
3120 }
3121 $importDirectory = "";
3122 $xmlFile = "";
3123
3124 $current_dir = opendir($a_dir);
3125 $files = array();
3126 while ($entryname = readdir($current_dir)) {
3127 $files[] = $entryname;
3128 }
3129
3130 foreach ($files as $file) {
3131 if (is_dir($a_dir . "/" . $file) and ($file !== "." and $file !== "..")) {
3132 // found directory created by zip
3133 $importDirectory = $a_dir . "/" . $file;
3134 }
3135 }
3136 closedir($current_dir);
3137 if ($importDirectory !== '') {
3138 // find the xml file
3139 $current_dir = opendir($importDirectory);
3140 $files = array();
3141 while ($entryname = readdir($current_dir)) {
3142 $files[] = $entryname;
3143 }
3144 foreach ($files as $file) {
3145 if (is_file($importDirectory . "/" . $file) &&
3146 ($file !== "." && $file !== "..") &&
3147 (preg_match("/^[0-9]{10}__[0-9]+__(svy_)*[0-9]+\.[A-Za-z]{1,3}$/", $file) ||
3148 preg_match("/^[0-9]{10}__[0-9]+__(survey__)*[0-9]+\.[A-Za-z]{1,3}$/", $file))) {
3149 // found xml file
3150 $xmlFile = $importDirectory . "/" . $file;
3151 }
3152 }
3153 }
3154 return array("dir" => $importDirectory, "xml" => $xmlFile);
3155 }

◆ modifyQuestionblock()

ilObjSurvey::modifyQuestionblock ( int  $questionblock_id,
string  $title,
bool  $show_questiontext,
bool  $show_blocktitle,
bool  $compress_view = false 
)
Todo:
move to survey question manager/repo

Definition at line 1740 of file class.ilObjSurvey.php.

1746 : void {
1747 $ilDB = $this->db;
1748 $ilDB->manipulateF(
1749 "UPDATE svy_qblk SET title = %s, show_questiontext = %s," .
1750 " show_blocktitle = %s, compress_view = %s WHERE questionblock_id = %s",
1751 array('text','text','text','integer', 'integer'),
1752 array($title, $show_questiontext, $show_blocktitle, $compress_view, $questionblock_id)
1753 );
1754 }

◆ moveQuestions()

ilObjSurvey::moveQuestions ( array  $move_questions,
int  $target_index,
int  $insert_mode 
)

Move questions and/or questionblocks to another position.

Parameters
array$move_questionsAn array with the question id's of the questions to move
int$target_indexThe question id of the target position
int$insert_mode0, if insert before the target position, 1 if insert after the target position
Todo:
move to survey question manager/repo

Definition at line 1368 of file class.ilObjSurvey.php.

1372 : void {
1373 $array_pos = array_search($target_index, $this->questions);
1374 $part1 = $part2 = [];
1375 if ($insert_mode === 0) {
1376 $part1 = array_slice($this->questions, 0, $array_pos);
1377 $part2 = array_slice($this->questions, $array_pos);
1378 } elseif ($insert_mode === 1) {
1379 $part1 = array_slice($this->questions, 0, $array_pos + 1);
1380 $part2 = array_slice($this->questions, $array_pos + 1);
1381 }
1382 $found = 0;
1383 foreach ($move_questions as $question_id) {
1384 if (!(!in_array($question_id, $part1))) {
1385 unset($part1[array_search($question_id, $part1)]);
1386 $found++;
1387 }
1388 if (!(!in_array($question_id, $part2))) {
1389 unset($part2[array_search($question_id, $part2)]);
1390 $found++;
1391 }
1392 }
1393 // sanity check: do not move questions if they have not be found in the array
1394 if ($found !== count($move_questions)) {
1395 return;
1396 }
1397 $part1 = array_values($part1);
1398 $part2 = array_values($part2);
1399 $this->questions = array_values(array_merge($part1, $move_questions, $part2));
1400 foreach ($move_questions as $question_id) {
1401 $constraints = $this->getConstraints($question_id);
1402 foreach ($constraints as $idx => $constraint) {
1403 foreach ($part2 as $next_question_id) {
1404 if ($constraint["question"] == $next_question_id) {
1405 // constraint concerning a question that follows -> delete constraint
1406 $this->deleteConstraint($constraint["id"]);
1407 }
1408 }
1409 }
1410 }
1411 $this->saveQuestionsToDb();
1412 }

◆ openAllAppraisees()

ilObjSurvey::openAllAppraisees ( )
Todo:
move to appraisal manager

Definition at line 4915 of file class.ilObjSurvey.php.

4915 : void
4916 {
4917 $ilDB = $this->db;
4918
4919 $ilDB->manipulate("UPDATE svy_360_appr" .
4920 " SET has_closed = " . $ilDB->quote(null, "integer") .
4921 " WHERE obj_id = " . $ilDB->quote($this->getSurveyId(), "integer"));
4922 }

References $ilDB.

◆ prepareTextareaOutput()

ilObjSurvey::prepareTextareaOutput ( string  $txt_output)

Prepares a string for a text area output in surveys.

Definition at line 3987 of file class.ilObjSurvey.php.

3989 : string {
3991 }
static prepareTextareaOutput(string $txt_output, bool $prepare_for_latex_output=false, bool $omitNl2BrWhenTextArea=false)
Prepares a string for a text area output where latex code may be in it If the text is HTML-free,...

◆ read()

ilObjSurvey::read ( )

Reimplemented from ilObject.

Definition at line 250 of file class.ilObjSurvey.php.

250 : void
251 {
252 parent::read();
253 $this->loadFromDb();
254 $this->initServices();
255 }

References initServices(), and loadFromDb().

+ Here is the call graph for this function:

◆ removeConstraintsConcerningQuestion()

ilObjSurvey::removeConstraintsConcerningQuestion ( int  $question_id)

Remove constraints concerning a question with a given question_id.

Todo:
move to constraint manager/repo

Definition at line 1432 of file class.ilObjSurvey.php.

1434 : void {
1435 $ilDB = $this->db;
1436 $result = $ilDB->queryF(
1437 "SELECT constraint_fi FROM svy_qst_constraint WHERE question_fi = %s AND survey_fi = %s",
1438 array('integer','integer'),
1439 array($question_id, $this->getSurveyId())
1440 );
1441 if ($result->numRows() > 0) {
1442 $remove_constraints = array();
1443 while ($row = $ilDB->fetchAssoc($result)) {
1444 $remove_constraints[] = $row["constraint_fi"];
1445 }
1446 $affectedRows = $ilDB->manipulateF(
1447 "DELETE FROM svy_qst_constraint WHERE question_fi = %s AND survey_fi = %s",
1448 array('integer','integer'),
1449 array($question_id, $this->getSurveyId())
1450 );
1451 foreach ($remove_constraints as $key => $constraint_id) {
1452 $affectedRows = $ilDB->manipulateF(
1453 "DELETE FROM svy_constraint WHERE constraint_id = %s",
1454 array('integer'),
1455 array($constraint_id)
1456 );
1457 }
1458 }
1459 }

References $ilDB.

◆ removeQuestion()

ilObjSurvey::removeQuestion ( int  $question_id)
Todo:
move to survey question manager/repo

Definition at line 1417 of file class.ilObjSurvey.php.

1419 : void {
1420 $question = self::_instanciateQuestion($question_id);
1421 #20610 if no question found, do nothing.
1422 if ($question) {
1423 $question->delete($question_id);
1424 $this->removeConstraintsConcerningQuestion($question_id);
1425 }
1426 }
removeConstraintsConcerningQuestion(int $question_id)
Remove constraints concerning a question with a given question_id.

Referenced by delete().

+ Here is the caller graph for this function:

◆ removeQuestionFromBlock()

ilObjSurvey::removeQuestionFromBlock ( int  $question_id,
int  $questionblock_id 
)
Todo:
move to survey question manager/repo

Definition at line 1531 of file class.ilObjSurvey.php.

1534 : void {
1535 $ilDB = $this->db;
1536
1537 $ilDB->manipulateF(
1538 "DELETE FROM svy_qblk_qst WHERE questionblock_fi = %s AND survey_fi = %s AND question_fi = %s",
1539 array('integer','integer','integer'),
1540 array($questionblock_id, $this->getSurveyId(), $question_id)
1541 );
1542 }

◆ removeQuestions()

ilObjSurvey::removeQuestions ( array  $remove_questions,
array  $remove_questionblocks 
)
Parameters
int[]$remove_questionsquestion ids of the questions to remove
int[]$remove_questionblocksquestionblock ids of the questions blocks to remove
Todo:
move to survey question manager/repo

Definition at line 1466 of file class.ilObjSurvey.php.

1469 : void {
1470 $ilDB = $this->db;
1471
1472 $block_sizes = array();
1473 foreach ($this->getSurveyQuestions() as $question_id => $data) {
1474 if (in_array($question_id, $remove_questions) or in_array($data["questionblock_id"], $remove_questionblocks)) {
1475 unset($this->questions[array_search($question_id, $this->questions)]);
1476 $this->removeQuestion($question_id);
1477 } elseif ($data["questionblock_id"]) {
1478 $block_sizes[$data["questionblock_id"]] = ($block_sizes[$data["questionblock_id"]] ?? 0) + 1;
1479 }
1480 }
1481
1482 // blocks with just 1 question need to be deleted
1483 foreach ($block_sizes as $block_id => $size) {
1484 if ($size < 2) {
1485 $remove_questionblocks[] = $block_id;
1486 }
1487 }
1488
1489 foreach (array_unique($remove_questionblocks) as $questionblock_id) {
1490 $affectedRows = $ilDB->manipulateF(
1491 "DELETE FROM svy_qblk WHERE questionblock_id = %s",
1492 array('integer'),
1493 array($questionblock_id)
1494 );
1495 $affectedRows = $ilDB->manipulateF(
1496 "DELETE FROM svy_qblk_qst WHERE questionblock_fi = %s AND survey_fi = %s",
1497 array('integer','integer'),
1498 array($questionblock_id, $this->getSurveyId())
1499 );
1500 }
1501
1502 $this->questions = array_values($this->questions);
1503 $this->saveQuestionsToDb();
1504 }

◆ removeSelectedSurveyResults()

ilObjSurvey::removeSelectedSurveyResults ( array  $finished_ids)

Deletes the user data of a given array of survey participants.

Todo:
move to run manager/repo

Definition at line 400 of file class.ilObjSurvey.php.

402 : void {
404
405 $user_ids = [];
406
407 foreach ($finished_ids as $finished_id) {
408 $result = $ilDB->queryF(
409 "SELECT finished_id, user_fi FROM svy_finished WHERE finished_id = %s",
410 array('integer'),
411 array($finished_id)
412 );
413 $row = $ilDB->fetchAssoc($result);
414 if ($row["user_fi"]) {
415 $user_ids[] = (int) $row["user_fi"];
416 }
417
418 $affectedRows = $ilDB->manipulateF(
419 "DELETE FROM svy_answer WHERE active_fi = %s",
420 array('integer'),
421 array($row["finished_id"])
422 );
423
424 $affectedRows = $ilDB->manipulateF(
425 "DELETE FROM svy_finished WHERE finished_id = %s",
426 array('integer'),
427 array($finished_id)
428 );
429
430 $affectedRows = $ilDB->manipulateF(
431 "DELETE FROM svy_times WHERE finished_fi = %s",
432 array('integer'),
433 array($row["finished_id"])
434 );
435 }
436
437 if (count($user_ids)) {
438 $lp_obj = ilObjectLP::getInstance($this->getId());
439 $lp_obj->resetLPDataForUserIds($user_ids);
440
441 // remove invitations, if exist
442 foreach ($user_ids as $user_id) {
443 $this->invitation_manager->remove($this->getSurveyId(), $user_id);
444 }
445 }
446 }

References $ilDB, and ILIAS\Repository\int().

+ Here is the call graph for this function:

◆ saveAuthorToMetadata()

ilObjSurvey::saveAuthorToMetadata ( string  $a_author = "")

Saves an authors name into the lifecycle metadata if no lifecycle metadata exists This will only be called for conversion of "old" surveys where the author hasn't been stored in the lifecycle metadata.

Definition at line 1136 of file class.ilObjSurvey.php.

1138 : void {
1139 if ($a_author === '') {
1140 $ilUser = $this->user;
1141 $a_author = $ilUser->getFullname();
1142 }
1143 $this->domain->metadata()->saveAuthorsInLOMIfNoLifecycleSet(
1144 $this->getId(),
1145 0,
1146 $this->getType(),
1147 $a_author,
1148 );
1149 }

Referenced by doCreateMetaData().

+ Here is the caller graph for this function:

◆ saveCompletionStatus()

ilObjSurvey::saveCompletionStatus ( )

Saves the completion status of the survey.

Todo:
move to survey manager/repo

Definition at line 514 of file class.ilObjSurvey.php.

514 : void
515 {
516 $db = $this->db;
517 if ($this->getSurveyId() > 0) {
519 "UPDATE svy_svy SET complete = %s, tstamp = %s WHERE survey_id = %s",
520 array('text','integer','integer'),
521 array($this->isComplete(), time(), $this->getSurveyId())
522 );
523 }
524 }
isComplete()
Check if survey is complete for use.
manipulateF(string $query, array $types, array $values)

◆ saveHeading()

ilObjSurvey::saveHeading ( string  $heading,
int  $insertbefore 
)
Todo:
move to survey question manager
Parameters
string$heading
int$insertbeforequestion id which gets the heading (before)

Definition at line 3530 of file class.ilObjSurvey.php.

3533 : void {
3534 $ilDB = $this->db;
3535 if ($heading) {
3536 $ilDB->manipulateF(
3537 "UPDATE svy_svy_qst SET heading=%s WHERE survey_fi=%s AND question_fi=%s",
3538 array('text','integer','integer'),
3539 array($heading, $this->getSurveyId(), $insertbefore)
3540 );
3541 } else {
3542 $ilDB->manipulateF(
3543 "UPDATE svy_svy_qst SET heading=%s WHERE survey_fi=%s AND question_fi=%s",
3544 array('text','integer','integer'),
3545 array(null, $this->getSurveyId(), $insertbefore)
3546 );
3547 }
3548 }

References $ilDB.

◆ saveQuestionsToDb()

ilObjSurvey::saveQuestionsToDb ( )

Definition at line 831 of file class.ilObjSurvey.php.

831 : void
832 {
834
835 $this->svy_log->debug("save questions");
836
837 // gather old questions state
838 $old_questions = array();
839 $result = $ilDB->queryF(
840 "SELECT survey_question_id,question_fi,sequence" .
841 " FROM svy_svy_qst WHERE survey_fi = %s",
842 array('integer'),
843 array($this->getSurveyId())
844 );
845 while ($row = $ilDB->fetchAssoc($result)) {
846 $old_questions[$row["question_fi"]] = $row; // problem, as soon as duplicates exist, they will be hidden here
847 }
848
849 // #15231 - diff with current questions state
850 $insert = $update = $delete = array();
851 foreach ($this->questions as $seq => $fi) {
852 if (!array_key_exists($fi, $old_questions)) { // really new fi IDs
853 $insert[] = $fi; // this should be ok, should not create duplicates here
854 } elseif ($old_questions[$fi]["sequence"] != $seq) { // we are updating one of the duplicates (if any)
855 $update[$fi] = $old_questions[$fi]["survey_question_id"];
856 }
857 // keep track of still relevant questions
858 unset($old_questions[$fi]); // deleting old question, if they are not in current array
859 }
860
861 // delete obsolete question relations
862 if (count($old_questions)) {
863 $del_ids = array();
864 foreach ($old_questions as $fi => $old) {
865 $del_ids[] = $old["survey_question_id"];
866 }
867 $ilDB->manipulate($q = "DELETE FROM svy_svy_qst" .
868 " WHERE " . $ilDB->in("survey_question_id", $del_ids, "", "integer"));
869 $this->svy_log->debug("delete: " . $q);
870 }
871 unset($old_questions);
872
873 // create/update question relations
874 foreach ($this->questions as $seq => $fi) {
875 if (in_array($fi, $insert)) {
876 // check if question is not already in the survey, see #22018
877 if (!$this->isQuestionInSurvey($fi)) {
878 $next_id = $ilDB->nextId('svy_svy_qst');
879 $ilDB->manipulateF(
880 "INSERT INTO svy_svy_qst" .
881 " (survey_question_id, survey_fi, question_fi, heading, sequence, tstamp)" .
882 " VALUES (%s, %s, %s, %s, %s, %s)",
883 array('integer', 'integer', 'integer', 'text', 'integer', 'integer'),
884 array($next_id, $this->getSurveyId(), $fi, null, $seq, time())
885 );
886 $this->svy_log->debug("insert svy_svy_qst, id:" . $next_id . ", fi: " . $fi . ", seq:" . $seq);
887 }
888 } elseif (array_key_exists($fi, $update)) {
889 $ilDB->manipulate("UPDATE svy_svy_qst" .
890 " SET sequence = " . $ilDB->quote($seq, "integer") .
891 ", tstamp = " . $ilDB->quote(time(), "integer") .
892 " WHERE survey_question_id = " . $ilDB->quote($update[$fi], "integer"));
893 $this->svy_log->debug("update svy_svy_qst, id:" . $update[$fi] . ", fi: " . $fi . ", seq:" . $seq);
894 }
895 }
896 }

References $ilDB, and $q.

◆ saveToDb()

ilObjSurvey::saveToDb ( )

Definition at line 696 of file class.ilObjSurvey.php.

696 : void
697 {
699
700 // date handling
701 $rmd_start = $this->getReminderStart();
702 if (is_object($rmd_start)) {
703 $rmd_start = $rmd_start->get(IL_CAL_DATE);
704 }
705 $rmd_end = $this->getReminderEnd();
706 if (is_object($rmd_end)) {
707 $rmd_end = $rmd_end->get(IL_CAL_DATE);
708 }
709 if ($this->getSurveyId() < 1) {
710 $next_id = $ilDB->nextId('svy_svy');
711 $affectedRows = $ilDB->insert("svy_svy", array(
712 "survey_id" => array("integer", $next_id),
713 "obj_fi" => array("integer", $this->getId()),
714 "author" => array("text", $this->getAuthor()),
715 "introduction" => array("clob", ilRTE::_replaceMediaObjectImageSrc($this->getIntroduction(), 0)),
716 "outro" => array("clob", ilRTE::_replaceMediaObjectImageSrc($this->getOutro(), 0)),
717 "startdate" => array("text", $this->getStartDate()),
718 "enddate" => array("text", $this->getEndDate()),
719 "evaluation_access" => array("text", $this->getEvaluationAccess()),
720 "complete" => array("text", $this->isComplete()),
721 "created" => array("integer", time()),
722 "anonymize" => array("text", $this->getAnonymize()),
723 "show_question_titles" => array("text", $this->getShowQuestionTitles()),
724 "mailnotification" => array('integer', ($this->getMailNotification()) ? 1 : 0),
725 "mailaddresses" => array('text', $this->getMailAddresses()),
726 "mailparticipantdata" => array('text', $this->getMailParticipantData()),
727 "tstamp" => array("integer", time()),
728 // Mode type
729 "mode" => array("integer", $this->getMode()),
730 // 360°
731 "mode_360_self_eval" => array("integer", $this->get360SelfEvaluation()),
732 "mode_360_self_rate" => array("integer", $this->get360SelfRaters()),
733 "mode_360_self_appr" => array("integer", $this->get360SelfAppraisee()),
734 "mode_360_results" => array("integer", $this->get360Results()),
735 // competences
736 "mode_skill_service" => array("integer", (int) $this->getSkillService()),
737 // Self Evaluation Only
738 "mode_self_eval_results" => array("integer", self::RESULTS_SELF_EVAL_OWN),
739 // reminder/notification
740 "reminder_status" => array("integer", (int) $this->getReminderStatus()),
741 "reminder_start" => array("datetime", $rmd_start),
742 "reminder_end" => array("datetime", $rmd_end),
743 "reminder_frequency" => array("integer", $this->getReminderFrequency()),
744 "reminder_target" => array("integer", $this->getReminderTarget()),
745 "reminder_last_sent" => array("datetime", $this->getReminderLastSent()),
746 "reminder_tmpl" => array("text", $this->getReminderTemplate(true)),
747 "tutor_ntf_status" => array("integer", (int) $this->getTutorNotificationStatus()),
748 "tutor_ntf_reci" => array("text", implode(";", $this->getTutorNotificationRecipients())),
749 "tutor_ntf_target" => array("integer", $this->getTutorNotificationTarget()),
750 "own_results_view" => array("integer", $this->hasViewOwnResults()),
751 "own_results_mail" => array("integer", $this->hasMailOwnResults()),
752 "tutor_res_status" => array("integer", (int) $this->getTutorResultsStatus()),
753 "tutor_res_reci" => array("text", implode(";", $this->getTutorResultsRecipients())),
754 "confirmation_mail" => array("integer", $this->hasMailConfirmation()),
755 "anon_user_list" => array("integer", $this->hasAnonymousUserList()),
756 "calculate_sum_score" => array("integer", $this->getCalculateSumScore())
757 ));
758 $this->setSurveyId($next_id);
759 } else {
760 $affectedRows = $ilDB->update("svy_svy", array(
761 "author" => array("text", $this->getAuthor()),
762 "introduction" => array("clob", ilRTE::_replaceMediaObjectImageSrc($this->getIntroduction(), 0)),
763 "outro" => array("clob", ilRTE::_replaceMediaObjectImageSrc($this->getOutro(), 0)),
764 "startdate" => array("text", $this->getStartDate()),
765 "enddate" => array("text", $this->getEndDate()),
766 "evaluation_access" => array("text", $this->getEvaluationAccess()),
767 "complete" => array("text", $this->isComplete()),
768 "anonymize" => array("text", $this->getAnonymize()),
769 "show_question_titles" => array("text", $this->getShowQuestionTitles()),
770 "mailnotification" => array('integer', ($this->getMailNotification()) ? 1 : 0),
771 "mailaddresses" => array('text', $this->getMailAddresses()),
772 "mailparticipantdata" => array('text', $this->getMailParticipantData()),
773 "tstamp" => array("integer", time()),
774 //MODE TYPE
775 "mode" => array("integer", $this->getMode()),
776 // 360°
777 "mode_360_self_eval" => array("integer", $this->get360SelfEvaluation()),
778 "mode_360_self_rate" => array("integer", $this->get360SelfRaters()),
779 "mode_360_self_appr" => array("integer", $this->get360SelfAppraisee()),
780 "mode_360_results" => array("integer", $this->get360Results()),
781 // Competences
782 "mode_skill_service" => array("integer", (int) $this->getSkillService()),
783 // Self Evaluation Only
784 "mode_self_eval_results" => array("integer", $this->getSelfEvaluationResults()),
785 // reminder/notification
786 "reminder_status" => array("integer", $this->getReminderStatus()),
787 "reminder_start" => array("datetime", $rmd_start),
788 "reminder_end" => array("datetime", $rmd_end),
789 "reminder_frequency" => array("integer", $this->getReminderFrequency()),
790 "reminder_target" => array("integer", $this->getReminderTarget()),
791 "reminder_last_sent" => array("datetime", $this->getReminderLastSent()),
792 "reminder_tmpl" => array("text", $this->getReminderTemplate()),
793 "tutor_ntf_status" => array("integer", $this->getTutorNotificationStatus()),
794 "tutor_ntf_reci" => array("text", implode(";", $this->getTutorNotificationRecipients())),
795 "tutor_ntf_target" => array("integer", $this->getTutorNotificationTarget()),
796 "own_results_view" => array("integer", $this->hasViewOwnResults()),
797 "own_results_mail" => array("integer", $this->hasMailOwnResults()),
798 "tutor_res_status" => array("integer", (int) $this->getTutorResultsStatus()),
799 "tutor_res_reci" => array("text", implode(";", $this->getTutorResultsRecipients())),
800 "confirmation_mail" => array("integer", $this->hasMailConfirmation()),
801 "anon_user_list" => array("integer", $this->hasAnonymousUserList()),
802 "calculate_sum_score" => array("integer", $this->getCalculateSumScore())
803 ), array(
804 "survey_id" => array("integer", $this->getSurveyId())
805 ));
806 }
807 if ($affectedRows) {
808 // save questions to db
809 $this->saveQuestionsToDb();
810 }
811
812 // moved activation to ilObjectActivation
813 if ($this->ref_id) {
814 ilObjectActivation::getItem($this->ref_id);
815
816 $item = new ilObjectActivation();
817 if (!$this->isActivationLimited()) {
818 $item->setTimingType(ilObjectActivation::TIMINGS_DEACTIVATED);
819 } else {
820 $item->setTimingType(ilObjectActivation::TIMINGS_ACTIVATION);
821 $item->setTimingStart($this->getActivationStartDate());
822 $item->setTimingEnd($this->getActivationEndDate());
823 $item->toggleVisible($this->getActivationVisibility());
824 }
825
826 $item->update($this->ref_id);
827 }
828 }
getTutorNotificationRecipients()
Mail being sent to tutors after all participants have finished the survey?
getReminderTemplate(bool $selectDefault=false)
getMailParticipantData()
Preceding text (incl.
getMailAddresses()
(Tutor) Recipients of "single participant has finished" mails
getMailNotification()
Send mail to tutors each time a participant finishes the survey?
Class ilObjectActivation.

References $ilDB, ilRTE\_replaceMediaObjectImageSrc(), ILIAS\Survey\Mode\getId(), ilObjectActivation\getItem(), IL_CAL_DATE, ilObjectActivation\TIMINGS_ACTIVATION, and ilObjectActivation\TIMINGS_DEACTIVATED.

Referenced by createReference().

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

◆ saveUserAccessCode()

ilObjSurvey::saveUserAccessCode ( int  $user_id,
string  $access_code 
)

Saves a survey access code for a registered user to the database.

Parameters
int$user_idThe database id of the user
string$access_codeThe survey access code
Todo:
move to code manager

Definition at line 3936 of file class.ilObjSurvey.php.

3939 : void {
3940 $ilDB = $this->db;
3941
3942 // not really sure what to do about ANONYMOUS_USER_ID
3943
3944 $next_id = $ilDB->nextId('svy_anonymous');
3945 $affectedRows = $ilDB->manipulateF(
3946 "INSERT INTO svy_anonymous (anonymous_id, survey_key, survey_fi, user_key, tstamp) " .
3947 "VALUES (%s, %s, %s, %s, %s)",
3948 array('integer','text', 'integer', 'text', 'integer'),
3949 array($next_id, $access_code, $this->getSurveyId(), md5($user_id), time())
3950 );
3951 }

◆ saveUserSettings()

ilObjSurvey::saveUserSettings ( int  $usr_id,
string  $key,
string  $title,
string  $value 
)

Definition at line 645 of file class.ilObjSurvey.php.

650 : void {
652
653 $next_id = $ilDB->nextId('svy_settings');
654 $affectedRows = $ilDB->insert("svy_settings", array(
655 "settings_id" => array("integer", $next_id),
656 "usr_id" => array("integer", $usr_id),
657 "keyword" => array("text", $key),
658 "title" => array("text", $title),
659 "value" => array("clob", $value)
660 ));
661 }

◆ send360ReminderToUser()

ilObjSurvey::send360ReminderToUser ( int  $a_user_id,
array  $a_appraisee_ids 
)

Definition at line 5219 of file class.ilObjSurvey.php.

5222 : void {
5223 $this->svy_log->debug("Send mail to:" . $a_user_id);
5224
5225 $ntf = new ilSystemNotification();
5226 $ntf->setLangModules(array("svy", "survey"));
5227 $ntf->setRefId($this->getRefId());
5228 $ntf->setGotoLangId('url');
5229
5230 // user specific language
5231 $lng = $ntf->getUserLanguage($a_user_id);
5232
5233 $ntf->setIntroductionLangId("svy_user_added_rater_reminder_mail");
5234 $subject = str_replace("%1", $this->getTitle(), $lng->txt("svy_user_added_rater"));
5235
5236 foreach ($a_appraisee_ids as $appraisee_id) {
5237 $ntf->addAdditionalInfo("survey_360_appraisee", ilUserUtil::getNamePresentation($appraisee_id, false, false, "", true));
5238 }
5239
5240 // #10044
5241 $mail = new ilMail(ANONYMOUS_USER_ID);
5242 $mail->enqueue(
5243 ilObjUser::_lookupLogin($a_user_id),
5244 "",
5245 "",
5246 $subject,
5247 $ntf->composeAndGetMessage($a_user_id, null, "read", true),
5248 []
5249 );
5250 }
getUserLanguage()
Return language of user.
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
static getNamePresentation( $a_user_id, bool $a_user_image=false, bool $a_profile_link=false, string $a_profile_back_link='', bool $a_force_first_lastname=false, bool $a_omit_login=false, bool $a_sortable=true, bool $a_return_data_array=false, $a_ctrl_path=null)
Default behaviour is:

◆ sendAppraiseeCloseNotification()

ilObjSurvey::sendAppraiseeCloseNotification ( int  $a_user_id)
Todo:
move to appraisal manager

Definition at line 4332 of file class.ilObjSurvey.php.

4334 : void {
4335 $ntf = new ilSystemNotification();
4336 $ntf->setLangModules(array("svy", "survey"));
4337 $ntf->setRefId($this->getRefId());
4338 $ntf->setGotoLangId('url');
4339
4340 // user specific language
4341 $lng = $ntf->getUserLanguage($a_user_id);
4342
4343 $ntf->setIntroductionLangId("svy_user_added_appraisee_close_mail");
4344 $subject = str_replace("%1", $this->getTitle(), $lng->txt("svy_user_added_appraisee"));
4345
4346 // #10044
4347 $mail = new ilMail(ANONYMOUS_USER_ID);
4348 $mail->enqueue(
4349 ilObjUser::_lookupLogin($a_user_id),
4350 "",
4351 "",
4352 $subject,
4353 $ntf->composeAndGetMessage($a_user_id, null, "read", true),
4354 []
4355 );
4356 }

◆ sendAppraiseeNotification()

ilObjSurvey::sendAppraiseeNotification ( int  $a_user_id)
Todo:
move to appraisal manager

Definition at line 4303 of file class.ilObjSurvey.php.

4305 : void {
4306 $ntf = new ilSystemNotification();
4307 $ntf->setLangModules(array("svy", "survey"));
4308 $ntf->setRefId($this->getRefId());
4309 $ntf->setGotoLangId('url');
4310
4311 // user specific language
4312 $lng = $ntf->getUserLanguage($a_user_id);
4313
4314 $ntf->setIntroductionLangId("svy_user_added_appraisee_mail");
4315 $subject = str_replace("%1", $this->getTitle(), $lng->txt("svy_user_added_appraisee"));
4316
4317 // #10044
4318 $mail = new ilMail(ANONYMOUS_USER_ID);
4319 $mail->enqueue(
4320 ilObjUser::_lookupLogin($a_user_id),
4321 "",
4322 "",
4323 $subject,
4324 $ntf->composeAndGetMessage($a_user_id, null, "read", true),
4325 []
4326 );
4327 }

◆ sendCodes()

ilObjSurvey::sendCodes ( int  $not_sent,
string  $subject,
string  $message,
string  $lang 
)
Todo:
move to code manager

Definition at line 3761 of file class.ilObjSurvey.php.

3766 : void {
3767 /*
3768 * 0 = all
3769 * 1 = not sent
3770 * 2 = finished
3771 * 3 = not finished
3772 */
3773 $check_finished = ($not_sent > 1);
3774
3775
3776 $mail = new ilMail(ANONYMOUS_USER_ID);
3777 $recipients = $this->getExternalCodeRecipients($check_finished);
3778 foreach ($recipients as $data) {
3779 if ($data['email'] && $data['code']) {
3780 $do_send = false;
3781 switch ($not_sent) {
3782 case 1:
3783 $do_send = !(bool) $data['sent'];
3784 break;
3785
3786 case 2:
3787 $do_send = $data['finished'];
3788 break;
3789
3790 case 3:
3791 $do_send = !$data['finished'];
3792 break;
3793
3794 default:
3795 $do_send = true;
3796 break;
3797 }
3798 if ($do_send) {
3799 // build text
3800 $messagetext = $message;
3801 $url = ilLink::_getLink(
3802 $this->getRefId(),
3803 "svy",
3804 array(
3805 "accesscode" => $data["code"],
3806 "lang" => $lang
3807 )
3808 );
3809 $messagetext = str_replace('[url]', $url, $messagetext);
3810 foreach ($data as $key => $value) {
3811 $messagetext = str_replace('[' . $key . ']', $value, $messagetext);
3812 }
3813
3814 // send mail
3815 $mail->enqueue(
3816 $data['email'], // to
3817 "", // cc
3818 "", // bcc
3819 $subject, // subject
3820 $messagetext, // message
3821 array() // attachments
3822 );
3823 }
3824 }
3825 }
3826
3827 $ilDB = $this->db;
3828 $ilDB->manipulateF(
3829 "UPDATE svy_anonymous SET sent = %s WHERE survey_fi = %s AND externaldata IS NOT NULL",
3830 array('integer','integer'),
3831 array(1, $this->getSurveyId())
3832 );
3833 }
getExternalCodeRecipients(bool $a_check_finished=false)
$url
Definition: shib_logout.php:68
$message
Definition: xapiexit.php:31

◆ sendNotificationMail()

ilObjSurvey::sendNotificationMail ( int  $a_user_id,
string  $a_anonymize_id,
int  $a_appr_id = 0 
)

These mails are sent to tutors for each single participant that finishes a survey.

It includes the "additional participant data" text that can be set in the settings screen.

Exceptions
ilWACException

Definition at line 2390 of file class.ilObjSurvey.php.

2394 : void {
2395 // #12755
2396 $placeholders = array(
2397 "FIRST_NAME" => "firstname",
2398 "LAST_NAME" => "lastname",
2399 "LOGIN" => "login",
2400 // old style
2401 "firstname" => "firstname"
2402 );
2403
2404 //mailaddresses is just text split by commas.
2405 //sendMail can send emails if it gets an user id or an email as first parameter.
2406 $recipients = explode(",", $this->mailaddresses ?? "");
2407 foreach ($recipients as $recipient) {
2408 // #11298
2409 $ntf = new ilSystemNotification();
2410 $ntf->setLangModules(array("survey"));
2411 $ntf->setRefId($this->getRefId());
2412 $ntf->setSubjectLangId('finished_mail_subject');
2413
2414 $messagetext = $this->mailparticipantdata;
2415 $data = [];
2416 if (trim($messagetext ?? "")) {
2417 if (!$this->hasAnonymizedResults()) {
2418 $data = ilObjUser::_getUserData(array($a_user_id));
2419 $data = $data[0];
2420 }
2421 foreach ($placeholders as $key => $mapping) {
2422 if ($this->hasAnonymizedResults()) { // #16480
2423 $messagetext = str_replace('[' . $key . ']', '', $messagetext);
2424 } else {
2425 $messagetext = str_replace('[' . $key . ']', trim($data[$mapping] ?? ""), $messagetext);
2426 }
2427 }
2428 $ntf->setIntroductionDirect($messagetext);
2429 } else {
2430 $ntf->setIntroductionLangId('survey_notification_finished_introduction');
2431 }
2432
2433 // 360°? add appraisee data
2434 if ($a_appr_id) {
2435 $ntf->addAdditionalInfo(
2436 'survey_360_appraisee',
2438 );
2439 }
2440
2441 $active_id = $this->getActiveID($a_user_id, $a_anonymize_id, $a_appr_id);
2442 if ($active_id) { // 43908
2443 $ntf->addAdditionalInfo(
2444 'results',
2445 $this->getParticipantTextResults($active_id),
2446 true
2447 );
2448 }
2449
2450 $ntf->setGotoLangId('survey_notification_tutor_link');
2451 $ntf->setReasonLangId('survey_notification_finished_reason');
2452
2453 $recipient = trim($recipient ?? "");
2454 $user_id = (int) ilObjUser::_lookupId($recipient);
2455 if ($user_id > 0) {
2456 $ntf->sendMailAndReturnRecipients([$user_id]);
2457 } else {
2458 $user_ids = ilObjUser::getUserIdsByEmail($recipient);
2459 if (count($user_ids) > 0) {
2460 $ntf->sendMailAndReturnRecipients([current($user_ids)]);
2461 }
2462 }
2463 /* note: this block is replace by the single line above
2464 since the UI asks for account names and the "e-mail" fallback leads
2465 to strange issues like multiple mails. Also the test case has been
2466 adopted, see https://mantis.ilias.de/view.php?id=36327
2467 if (is_numeric($recipient)) {
2468 $lng = $ntf->getUserLanguage((int) $recipient);
2469 $ntf->sendMailAndReturnRecipients([(int) $recipient]);
2470 } else {
2471 $recipient = trim($recipient);
2472 $user_ids = ilObjUser::getUserIdsByEmail($recipient);
2473 if (empty($user_ids)) {
2474 $ntf->sendMailAndReturnRecipients([ilObjUser::_lookupId($recipient)]);
2475 } else {
2476 foreach ($user_ids as $user_id) {
2477 $lng = $ntf->getUserLanguage($user_id);
2478 $ntf->sendMailAndReturnRecipients(array($user_id));
2479 }
2480 }
2481 }*/
2482 }
2483 }
getActiveID(int $user_id, string $anonymize_id, int $appr_id)
Get run id.
getParticipantTextResults(int $active_id)
static _getUserData(array $a_internalids)
static getUserIdsByEmail(string $a_email)
static _lookupId(string|array $a_user_str)

◆ sendRaterNotification()

ilObjSurvey::sendRaterNotification ( int  $a_user_id,
int  $a_appraisee_id 
)
Todo:
move to appraisal manager

Definition at line 4361 of file class.ilObjSurvey.php.

4364 : void {
4365 $ntf = new ilSystemNotification();
4366 $ntf->setLangModules(array("svy", "survey"));
4367 $ntf->setRefId($this->getRefId());
4368 $ntf->setGotoLangId('url');
4369
4370 // user specific language
4371 $lng = $ntf->getUserLanguage($a_user_id);
4372
4373 $ntf->setIntroductionLangId("svy_user_added_rater_mail");
4374 $subject = str_replace("%1", $this->getTitle(), $lng->txt("svy_user_added_rater"));
4375 $ntf->addAdditionalInfo("survey_360_appraisee", ilUserUtil::getNamePresentation($a_appraisee_id, false, false, "", true));
4376
4377 // #10044
4378 $mail = new ilMail(ANONYMOUS_USER_ID);
4379 $mail->enqueue(
4380 ilObjUser::_lookupLogin($a_user_id),
4381 "",
4382 "",
4383 $subject,
4384 $ntf->composeAndGetMessage($a_user_id, null, "read", true),
4385 []
4386 );
4387 }

◆ sendTutorNotification()

ilObjSurvey::sendTutorNotification ( )
protected

Send mail to tutors after all participants have finished the survey.

Definition at line 5286 of file class.ilObjSurvey.php.

5286 : void
5287 {
5288 $link = ilLink::_getStaticLink($this->getRefId(), "svy");
5289
5290 // get tutors being set in the setting
5291 foreach ($this->getTutorNotificationRecipients() as $user_id) {
5292 // use language of recipient to compose message
5294 $ulng->loadLanguageModule('survey');
5295
5296 $subject = sprintf($ulng->txt('survey_notification_tutor_subject'), $this->getTitle());
5297 $message = sprintf($ulng->txt('survey_notification_tutor_salutation'), ilObjUser::_lookupFullname($user_id)) . "\n\n";
5298
5299 $message .= $ulng->txt('survey_notification_tutor_body') . ":\n\n";
5300 $message .= $ulng->txt('obj_svy') . ": " . $this->getTitle() . "\n";
5301 $message .= "\n" . $ulng->txt('survey_notification_tutor_link') . ": " . $link;
5302
5303 $mail_obj = new ilMail(ANONYMOUS_USER_ID);
5304 $mail_obj->appendInstallationSignature(true);
5305 $mail_obj->enqueue(
5307 "",
5308 "",
5309 $subject,
5310 $message,
5311 array()
5312 );
5313 }
5314 }
static _getLanguageOfUser(int $a_usr_id)
Get language object of user.

References $message, $user_id, ilLanguageFactory\_getLanguageOfUser(), ilLink\_getStaticLink(), ilObjUser\_lookupFullname(), ilObjUser\_lookupLogin(), ANONYMOUS_USER_ID, and ILIAS\GlobalScreen\Scope\Footer\Factory\getTitle().

+ Here is the call graph for this function:

◆ sent360Reminders()

ilObjSurvey::sent360Reminders ( )

Send 360 reminders.

Definition at line 5150 of file class.ilObjSurvey.php.

5150 : void
5151 {
5152 global $DIC;
5153
5154 $access = $DIC->access();
5155 // collect all open ratings
5156 $rater_ids = array();
5157 foreach ($this->getAppraiseesData() as $app) {
5158 $this->svy_log->debug("Handle appraisee " . $app['user_id']);
5159
5160 if (!$this->isAppraiseeClosed($app['user_id'])) {
5161 $this->svy_log->debug("Check self evaluation, self: " . $this->get360SelfAppraisee() . ", target: " . $this->getReminderTarget());
5162
5163 // self evaluation?
5164 if ($this->get360SelfEvaluation() &&
5165 in_array($this->getReminderTarget(), array(self::NOTIFICATION_APPRAISEES, self::NOTIFICATION_APPRAISEES_AND_RATERS))) {
5166 $this->svy_log->debug("...1");
5167 // did user already finished self evaluation?
5168 if (!$this->is360SurveyStarted((int) $app['user_id'], (int) $app['user_id'])) {
5169 $this->svy_log->debug("...2");
5170 if (!isset($rater_ids[$app['user_id']])) {
5171 $rater_ids[$app['user_id']] = array();
5172 }
5173 if (!isset($app["user_id"], $rater_ids[$app['user_id']])) {
5174 $rater_ids[$app['user_id']][] = $app["user_id"];
5175 }
5176 }
5177 }
5178
5179 $this->svy_log->debug("Check raters.");
5180
5181 // should raters be notified?
5182 if (
5183 in_array(
5184 $this->getReminderTarget(),
5185 array(self::NOTIFICATION_RATERS, self::NOTIFICATION_APPRAISEES_AND_RATERS),
5186 true
5187 )
5188 ) {
5189 foreach ($this->getRatersData($app['user_id']) as $rater) {
5190 $rater_id = 0;
5191 if ($rater["login"] !== "") {
5192 $rater_id = ilObjUser::_lookupId($rater["login"]);
5193 }
5194 if ($rater_id > 0) {
5195 // is rater not anonymous and did not rate yet?
5196 if (!($rater["anonymous_id"] ?? false) && !($rater["finished"] ?? false)) {
5197 if (!isset($rater_ids[$rater_id])) {
5198 $rater_ids[$rater_id] = array();
5199 }
5200 if (!in_array($app["user_id"], $rater_ids[$rater_id])) {
5201 $rater_ids[$rater_id][] = $app["user_id"];
5202 }
5203 }
5204 }
5205 }
5206 }
5207 }
5208 }
5209
5210 $this->svy_log->debug("Found raters:" . count($rater_ids));
5211
5212 foreach ($rater_ids as $id => $app) {
5213 if ($access->checkAccessOfUser((int) $id, "read", "", $this->getRefId())) {
5214 $this->send360ReminderToUser((int) $id, $app);
5215 }
5216 }
5217 }
isAppraiseeClosed(int $a_user_id)
send360ReminderToUser(int $a_user_id, array $a_appraisee_ids)

References $DIC, $id, ilObjUser\_lookupId(), and ilRBACAccessHandler\checkAccessOfUser().

+ Here is the call graph for this function:

◆ sentReminderPlaceholders()

ilObjSurvey::sentReminderPlaceholders ( string  $a_message,
int  $a_user_id,
array  $a_context_params 
)
protected

Definition at line 5566 of file class.ilObjSurvey.php.

5570 : string {
5571 // see ilMail::replacePlaceholders()
5572 try {
5574
5575 $user = new \ilObjUser($a_user_id);
5576
5577 $a_message = $this->placeholder_resolver->resolve($context, $a_message, $user, $a_context_params);
5578 } catch (\Exception $e) {
5579 ilLoggerFactory::getLogger('mail')->error(__METHOD__ . ' has been called with invalid context.');
5580 }
5581
5582 return $a_message;
5583 }
$context
Definition: webdav.php:31

◆ set360RaterSent()

ilObjSurvey::set360RaterSent ( int  $a_appraisee_id,
int  $a_user_id,
int  $a_anonymous_id,
?int  $a_tstamp = null 
)
Todo:
move to appraisal manager

Definition at line 4862 of file class.ilObjSurvey.php.

4867 : void {
4868 $ilDB = $this->db;
4869
4870 if (!$a_tstamp) {
4871 $a_tstamp = time();
4872 }
4873
4874 $ilDB->manipulate("UPDATE svy_360_rater" .
4875 " SET mail_sent = " . $ilDB->quote($a_tstamp, "integer") .
4876 " WHERE obj_id = " . $ilDB->quote($this->getSurveyId(), "integer") .
4877 " AND appr_id = " . $ilDB->quote($a_appraisee_id, "integer") .
4878 " AND user_id = " . $ilDB->quote($a_user_id, "integer") .
4879 " AND anonymous_id = " . $ilDB->quote($a_anonymous_id, "integer"));
4880 }

◆ set360Results()

ilObjSurvey::set360Results ( int  $a_value)

Definition at line 4264 of file class.ilObjSurvey.php.

4264 : void
4265 {
4266 $this->mode_360_results = $a_value;
4267 }

◆ set360SelfAppraisee()

ilObjSurvey::set360SelfAppraisee ( bool  $a_value)

Definition at line 4244 of file class.ilObjSurvey.php.

4244 : void
4245 {
4246 $this->mode_360_self_appr = $a_value;
4247 }

◆ set360SelfEvaluation()

ilObjSurvey::set360SelfEvaluation ( bool  $a_value)

Definition at line 4234 of file class.ilObjSurvey.php.

4234 : void
4235 {
4236 $this->mode_360_self_eval = $a_value;
4237 }

◆ set360SelfRaters()

ilObjSurvey::set360SelfRaters ( bool  $a_value)

Definition at line 4254 of file class.ilObjSurvey.php.

4254 : void
4255 {
4256 $this->mode_360_self_rate = $a_value;
4257 }

◆ setActivationEndDate()

ilObjSurvey::setActivationEndDate ( ?int  $ending_time = null)

Definition at line 5476 of file class.ilObjSurvey.php.

5478 : void {
5479 $this->activation_ending_time = $ending_time;
5480 }

◆ setActivationLimited()

ilObjSurvey::setActivationLimited ( bool  $a_value)

Definition at line 1313 of file class.ilObjSurvey.php.

1313 : void
1314 {
1315 $this->activation_limited = $a_value;
1316 }

◆ setActivationStartDate()

ilObjSurvey::setActivationStartDate ( ?int  $starting_time = null)

Definition at line 5470 of file class.ilObjSurvey.php.

5472 : void {
5473 $this->activation_starting_time = $starting_time;
5474 }

◆ setActivationVisibility()

ilObjSurvey::setActivationVisibility ( bool  $a_value)

Definition at line 1297 of file class.ilObjSurvey.php.

1299 : void {
1300 $this->activation_visibility = $a_value;
1301 }

◆ setAnonymize()

ilObjSurvey::setAnonymize ( int  $a_anonymize)

set anonymize status

Definition at line 936 of file class.ilObjSurvey.php.

936 : void
937 {
938 switch ($a_anonymize) {
943 $this->anonymize = $a_anonymize;
944 break;
945 default:
946 $this->anonymize = self::ANONYMIZE_OFF;
947 break;
948 }
949 }
const ANONYMIZE_FREEACCESS
const ANONYMIZE_CODE_ALL

◆ setAnonymousUserList()

ilObjSurvey::setAnonymousUserList ( bool  $a_value)

Definition at line 5522 of file class.ilObjSurvey.php.

5522 : void
5523 {
5524 $this->anon_user_list = $a_value;
5525 }

◆ setAuthor()

ilObjSurvey::setAuthor ( string  $author = "")

Definition at line 1125 of file class.ilObjSurvey.php.

1127 : void {
1128 $this->author = $author;
1129 }
string $author
A text representation of the authors name.

◆ setCalculateSumScore()

ilObjSurvey::setCalculateSumScore ( bool  $a_val)

Definition at line 956 of file class.ilObjSurvey.php.

958 : void {
959 $this->calculate_sum_score = $a_val;
960 }

◆ setEndDate()

ilObjSurvey::setEndDate ( string  $end_date = "")
Parameters
string$end_date(YYYYMMDDHHMMSS)

Definition at line 1232 of file class.ilObjSurvey.php.

1234 : void {
1235 $this->end_date = $end_date;
1236 }

◆ setEndDateAndTime()

ilObjSurvey::setEndDateAndTime ( string  $end_date,
string  $end_time 
)
Parameters
string$end_date(YYYY-MM-DD)
string$end_time(HH:MM:SS)

Definition at line 1262 of file class.ilObjSurvey.php.

1265 : void {
1266 $y = '';
1267 $m = '';
1268 $d = '';
1269 $h = '';
1270 $i = '';
1271 $s = '';
1272 if (preg_match("/(\d{4})-(\d{2})-(\d{2})/", $end_date, $matches)) {
1273 $y = $matches[1];
1274 $m = $matches[2];
1275 $d = $matches[3];
1276 }
1277 if (preg_match("/(\d{2}):(\d{2}):(\d{2})/", $end_time, $matches)) {
1278 $h = $matches[1];
1279 $i = $matches[2];
1280 $s = $matches[3];
1281 }
1282 $this->end_date = sprintf('%04d%02d%02d%02d%02d%02d', $y, $m, $d, $h, $i, $s);
1283 }

References Vendor\Package\$d.

◆ setEvaluationAccess()

ilObjSurvey::setEvaluationAccess ( string  $evaluation_access = self::EVALUATION_ACCESS_OFF)

Definition at line 1291 of file class.ilObjSurvey.php.

1293 : void {
1294 $this->evaluation_access = $evaluation_access;
1295 }

◆ setIntroduction()

ilObjSurvey::setIntroduction ( string  $introduction = "")

Definition at line 1171 of file class.ilObjSurvey.php.

1173 : void {
1174 $this->introduction = $introduction;
1175 }

◆ setMailAddresses()

ilObjSurvey::setMailAddresses ( string  $a_addresses)

Set (Tutor) Recipients of "single participant has finished" mails.

Definition at line 4122 of file class.ilObjSurvey.php.

4122 : void
4123 {
4124 $this->mailaddresses = $a_addresses;
4125 }

◆ setMailConfirmation()

ilObjSurvey::setMailConfirmation ( bool  $a_value)

Definition at line 5512 of file class.ilObjSurvey.php.

5512 : void
5513 {
5514 $this->mail_confirmation = $a_value;
5515 }

◆ setMailNotification()

ilObjSurvey::setMailNotification ( bool  $a_notification)

Activate mail to tutors each time a participant finishes the survey.

Definition at line 4106 of file class.ilObjSurvey.php.

4106 : void
4107 {
4108 $this->mailnotification = $a_notification;
4109 }

◆ setMailOwnResults()

ilObjSurvey::setMailOwnResults ( bool  $a_value)

Definition at line 5502 of file class.ilObjSurvey.php.

5502 : void
5503 {
5504 $this->mail_own_results = $a_value;
5505 }

◆ setMailParticipantData()

ilObjSurvey::setMailParticipantData ( string  $a_data)

Set preceding text (incl.

placeholders) for "single participant has finished" mails

Definition at line 4138 of file class.ilObjSurvey.php.

4138 : void
4139 {
4140 $this->mailparticipantdata = $a_data;
4141 }

◆ setMode()

ilObjSurvey::setMode ( int  $a_value)

Definition at line 5585 of file class.ilObjSurvey.php.

5585 : void
5586 {
5587 $this->mode = $a_value;
5588 }

◆ setObligatoryStates()

ilObjSurvey::setObligatoryStates ( array  $obligatory_questions)

Sets the obligatory states for questions in a survey from the questions form.

Parameters
array$obligatory_questionskey is question id, value should be bool value
Todo:
move to survey question manager/repo

Definition at line 1882 of file class.ilObjSurvey.php.

1884 : void {
1885 $ilDB = $this->db;
1886 $result = $ilDB->queryF(
1887 "SELECT * FROM svy_svy_qst WHERE survey_fi = %s",
1888 array('integer'),
1889 array($this->getSurveyId())
1890 );
1891 if ($result->numRows()) {
1892 while ($row = $ilDB->fetchAssoc($result)) {
1893 if (!array_key_exists($row["question_fi"], $obligatory_questions)) {
1894 $obligatory_questions[$row["question_fi"]] = 0;
1895 }
1896 }
1897 }
1898 // set the obligatory states in the database
1899 foreach ($obligatory_questions as $question_fi => $obligatory) {
1900 // #12420
1901 $ilDB->manipulate("UPDATE svy_question" .
1902 " SET obligatory = " . $ilDB->quote($obligatory, "integer") .
1903 " WHERE question_id = " . $ilDB->quote($question_fi, "integer"));
1904 }
1905 }

References $ilDB.

◆ setOutro()

ilObjSurvey::setOutro ( string  $outro = "")

Definition at line 1177 of file class.ilObjSurvey.php.

1179 : void {
1180 $this->outro = $outro;
1181 }

◆ setPage()

ilObjSurvey::setPage ( int  $finished_id,
int  $page_id 
)

Sets the number of the active survey page.

Parameters
int$finished_idid of the active user
int$page_idindex of the page
Todo:
move to run manager/repo

Definition at line 2371 of file class.ilObjSurvey.php.

2374 : void {
2375 $ilDB = $this->db;
2376
2377 $ilDB->manipulateF(
2378 "UPDATE svy_finished SET lastpage = %s WHERE finished_id = %s",
2379 array('integer','integer'),
2380 array(($page_id) ?: 0, $finished_id)
2381 );
2382 }

◆ setPoolUsage()

ilObjSurvey::setPoolUsage ( bool  $a_value)

Definition at line 4179 of file class.ilObjSurvey.php.

4179 : void
4180 {
4181 $this->pool_usage = $a_value;
4182 }

◆ setReminderEnd()

ilObjSurvey::setReminderEnd ( ?ilDate  $a_value = null)

Definition at line 4997 of file class.ilObjSurvey.php.

4997 : void
4998 {
4999 $this->reminder_end = $a_value;
5000 }

◆ setReminderFrequency()

ilObjSurvey::setReminderFrequency ( int  $a_value)

Definition at line 5007 of file class.ilObjSurvey.php.

5007 : void
5008 {
5009 $this->reminder_frequency = $a_value;
5010 }

◆ setReminderLastSent()

ilObjSurvey::setReminderLastSent ( ?string  $a_value)

Definition at line 5027 of file class.ilObjSurvey.php.

5027 : void
5028 {
5029 if ($a_value == "") {
5030 $a_value = null;
5031 }
5032 $this->reminder_last_sent = $a_value;
5033 }

◆ setReminderStart()

ilObjSurvey::setReminderStart ( ?ilDate  $a_value = null)

Definition at line 4987 of file class.ilObjSurvey.php.

4987 : void
4988 {
4989 $this->reminder_start = $a_value;
4990 }

◆ setReminderStatus()

ilObjSurvey::setReminderStatus ( bool  $a_value)

Definition at line 4977 of file class.ilObjSurvey.php.

4977 : void
4978 {
4979 $this->reminder_status = $a_value;
4980 }

◆ setReminderTarget()

ilObjSurvey::setReminderTarget ( int  $a_value)

Definition at line 5017 of file class.ilObjSurvey.php.

5017 : void
5018 {
5019 $this->reminder_target = $a_value;
5020 }

Referenced by ILIAS\Survey\Mode\Feedback360\UIModifier\setValuesFromForm(), and ILIAS\Survey\Mode\IndividualFeedback\UIModifier\setValuesFromForm().

+ Here is the caller graph for this function:

◆ setReminderTemplate()

ilObjSurvey::setReminderTemplate ( ?int  $a_value)

Definition at line 5050 of file class.ilObjSurvey.php.

5050 : void
5051 {
5052 $this->reminder_tmpl = $a_value;
5053 }

◆ setSelfEvaluationResults()

ilObjSurvey::setSelfEvaluationResults ( int  $a_value)

Definition at line 5595 of file class.ilObjSurvey.php.

5595 : void
5596 {
5597 $this->mode_self_eval_results = $a_value;
5598 }

◆ setShowQuestionTitles()

ilObjSurvey::setShowQuestionTitles ( bool  $a_show)

Definition at line 1166 of file class.ilObjSurvey.php.

1166 : void
1167 {
1168 $this->display_question_titles = $a_show;
1169 }

◆ setSkillService()

ilObjSurvey::setSkillService ( bool  $a_val)

Definition at line 4849 of file class.ilObjSurvey.php.

4849 : void
4850 {
4851 $this->mode_skill_service = $a_val;
4852 }

◆ setStartDate()

ilObjSurvey::setStartDate ( string  $start_date = "")
Parameters
string$start_date(YYYYMMDDHHMMSS)

Definition at line 1191 of file class.ilObjSurvey.php.

1193 : void {
1194 $this->start_date = $start_date;
1195 }

◆ setStartDateAndTime()

ilObjSurvey::setStartDateAndTime ( string  $start_date,
string  $start_time 
)
Parameters
string$start_date(YYYY-MM-DD)
string$start_time(HH:MM:SS)

Definition at line 1201 of file class.ilObjSurvey.php.

1204 : void {
1205 $y = '';
1206 $m = '';
1207 $d = '';
1208 $h = '';
1209 $i = '';
1210 $s = '';
1211 if (preg_match("/(\d{4})-(\d{2})-(\d{2})/", $start_date, $matches)) {
1212 $y = $matches[1];
1213 $m = $matches[2];
1214 $d = $matches[3];
1215 }
1216 if (preg_match("/(\d{2}):(\d{2}):(\d{2})/", $start_time, $matches)) {
1217 $h = $matches[1];
1218 $i = $matches[2];
1219 $s = $matches[3];
1220 }
1221 $this->start_date = sprintf('%04d%02d%02d%02d%02d%02d', $y, $m, $d, $h, $i, $s);
1222 }

References Vendor\Package\$d.

◆ setSurveyId()

ilObjSurvey::setSurveyId ( int  $survey_id)

Definition at line 4066 of file class.ilObjSurvey.php.

4066 : void
4067 {
4068 $this->survey_id = $survey_id;
4069 }

◆ setTutorNotificationRecipients()

ilObjSurvey::setTutorNotificationRecipients ( array  $a_value)

Set tutor recipients for "all participants have finished" mail.

Definition at line 5079 of file class.ilObjSurvey.php.

5079 : void
5080 {
5081 $this->tutor_ntf_recipients = $a_value;
5082 }

◆ setTutorNotificationStatus()

ilObjSurvey::setTutorNotificationStatus ( bool  $a_value)

Activates mail being sent to tutors after all participants have finished the survey.

Definition at line 5063 of file class.ilObjSurvey.php.

5063 : void
5064 {
5065 $this->tutor_ntf_status = $a_value;
5066 }

◆ setTutorNotificationTarget()

ilObjSurvey::setTutorNotificationTarget ( int  $a_value)

Definition at line 5095 of file class.ilObjSurvey.php.

5095 : void
5096 {
5097 $this->tutor_ntf_target = $a_value;
5098 }

◆ setTutorResultsRecipients()

ilObjSurvey::setTutorResultsRecipients ( array  $a_value)

Definition at line 5115 of file class.ilObjSurvey.php.

5115 : void
5116 {
5117 $this->tutor_res_recipients = $a_value;
5118 }

◆ setTutorResultsStatus()

ilObjSurvey::setTutorResultsStatus ( bool  $a_value)

Definition at line 5105 of file class.ilObjSurvey.php.

5105 : void
5106 {
5107 $this->tutor_res_status = $a_value;
5108 }

◆ setViewOwnResults()

ilObjSurvey::setViewOwnResults ( bool  $a_value)

Definition at line 5492 of file class.ilObjSurvey.php.

5492 : void
5493 {
5494 $this->view_own_results = $a_value;
5495 }

◆ toXML()

ilObjSurvey::toXML ( )

Returns a QTI xml representation of the survey.

Todo:
move to export sub-service

Definition at line 2928 of file class.ilObjSurvey.php.

2928 : string
2929 {
2930 $a_xml_writer = new ilXmlWriter();
2931 // set xml header
2932 $a_xml_writer->xmlHeader();
2933 $attrs = array(
2934 "xmlns:xsi" => "http://www.w3.org/2001/XMLSchema-instance",
2935 "xsi:noNamespaceSchemaLocation" => "https://www.ilias.de/download/xsd/ilias_survey_4_2.xsd"
2936 );
2937 $a_xml_writer->xmlStartTag("surveyobject", $attrs);
2938 $attrs = array(
2939 "id" => $this->getSurveyId(),
2940 "title" => $this->getTitle()
2941 );
2942 $a_xml_writer->xmlStartTag("survey", $attrs);
2943
2944 $a_xml_writer->xmlElement("description", null, $this->getDescription());
2945 $a_xml_writer->xmlElement("author", null, $this->getAuthor());
2946 $a_xml_writer->xmlStartTag("objectives");
2947 $attrs = array(
2948 "label" => "introduction"
2949 );
2950 $this->addMaterialTag($a_xml_writer, $this->getIntroduction(), true, true, $attrs);
2951 $attrs = array(
2952 "label" => "outro"
2953 );
2954 $this->addMaterialTag($a_xml_writer, $this->getOutro(), true, true, $attrs);
2955 $a_xml_writer->xmlEndTag("objectives");
2956
2957 if ($this->getAnonymize()) {
2958 $attribs = array("enabled" => "1");
2959 } else {
2960 $attribs = array("enabled" => "0");
2961 }
2962 $a_xml_writer->xmlElement("anonymisation", $attribs);
2963 $a_xml_writer->xmlStartTag("restrictions");
2964 if ($this->getAnonymize() === 2) {
2965 $attribs = array("type" => "free");
2966 } else {
2967 $attribs = array("type" => "restricted");
2968 }
2969 $a_xml_writer->xmlElement("access", $attribs);
2970 if ($this->getStartDate()) {
2971 $attrs = array("type" => "date");
2972 preg_match("/(\d{4})(\d{2})(\d{2})(\d{2})(\d{2})(\d{2})/", $this->getStartDate(), $matches);
2973 $a_xml_writer->xmlElement("startingtime", $attrs, sprintf("%04d-%02d-%02dT%02d:%02d:00", $matches[1], $matches[2], $matches[3], $matches[4], $matches[5]));
2974 }
2975 if ($this->getEndDate()) {
2976 $attrs = array("type" => "date");
2977 preg_match("/(\d{4})(\d{2})(\d{2})(\d{2})(\d{2})(\d{2})/", $this->getEndDate(), $matches);
2978 $a_xml_writer->xmlElement("endingtime", $attrs, sprintf("%04d-%02d-%02dT%02d:%02d:00", $matches[1], $matches[2], $matches[3], $matches[4], $matches[5]));
2979 }
2980 $a_xml_writer->xmlEndTag("restrictions");
2981
2982 // constraints
2983 $pages = $this->getSurveyPages();
2984 $hasconstraints = false;
2985 foreach ($pages as $question_array) {
2986 foreach ($question_array as $question) {
2987 if (count($question["constraints"])) {
2988 $hasconstraints = true;
2989 }
2990 }
2991 }
2992
2993 if ($hasconstraints) {
2994 $a_xml_writer->xmlStartTag("constraints");
2995 foreach ($pages as $question_array) {
2996 foreach ($question_array as $question) {
2997 if (count($question["constraints"])) {
2998 // found constraints
2999 foreach ($question["constraints"] as $constraint) {
3000 $attribs = array(
3001 "sourceref" => $question["question_id"],
3002 "destref" => $constraint["question"],
3003 "relation" => $constraint["short"],
3004 "value" => $constraint["value"],
3005 "conjunction" => $constraint["conjunction"]
3006 );
3007 $a_xml_writer->xmlElement("constraint", $attribs);
3008 }
3009 }
3010 }
3011 }
3012 $a_xml_writer->xmlEndTag("constraints");
3013 }
3014
3015 // add the rest of the preferences in qtimetadata tags, because there is no correspondent definition in QTI
3016 $a_xml_writer->xmlStartTag("metadata");
3017
3018 $custom_properties = array();
3019 $custom_properties["evaluation_access"] = $this->getEvaluationAccess();
3020 $custom_properties["status"] = !$this->getOfflineStatus();
3021 $custom_properties["display_question_titles"] = $this->getShowQuestionTitles();
3022
3023 $custom_properties["own_results_view"] = (int) $this->hasViewOwnResults();
3024 $custom_properties["own_results_mail"] = (int) $this->hasMailOwnResults();
3025 $custom_properties["confirmation_mail"] = (int) $this->hasMailConfirmation();
3026
3027 $custom_properties["anon_user_list"] = (int) $this->hasAnonymousUserList();
3028 $custom_properties["mode"] = $this->getMode();
3029 $custom_properties["mode_360_self_eval"] = (int) $this->get360SelfEvaluation();
3030 $custom_properties["mode_360_self_rate"] = (int) $this->get360SelfRaters();
3031 $custom_properties["mode_360_self_appr"] = (int) $this->get360SelfAppraisee();
3032 $custom_properties["mode_360_results"] = $this->get360Results();
3033 $custom_properties["mode_skill_service"] = (int) $this->getSkillService();
3034 $custom_properties["mode_self_eval_results"] = $this->getSelfEvaluationResults();
3035
3036
3037 // :TODO: skills?
3038
3039 // reminder/tutor notification are (currently?) not exportable
3040
3041 foreach ($custom_properties as $label => $value) {
3042 $a_xml_writer->xmlStartTag("metadatafield");
3043 $a_xml_writer->xmlElement("fieldlabel", null, $label);
3044 $a_xml_writer->xmlElement("fieldentry", null, $value);
3045 $a_xml_writer->xmlEndTag("metadatafield");
3046 }
3047
3048 $a_xml_writer->xmlEndTag("metadata");
3049 $a_xml_writer->xmlEndTag("survey");
3050
3051 $attribs = array("id" => $this->getId());
3052 $a_xml_writer->xmlStartTag("surveyquestions", $attribs);
3053 // add questionblock descriptions
3054 foreach ($pages as $question_array) {
3055 if (count($question_array) > 1) {
3056 $attribs = array("id" => $question_array[0]["question_id"]);
3057 $attribs = array(
3058 "showQuestiontext" => $question_array[0]["questionblock_show_questiontext"],
3059 "showBlocktitle" => $question_array[0]["questionblock_show_blocktitle"],
3060 "compressView" => $question_array[0]["questionblock_compress_view"]
3061 );
3062 $a_xml_writer->xmlStartTag("questionblock", $attribs);
3063 if (strlen($question_array[0]["questionblock_title"])) {
3064 $a_xml_writer->xmlElement("questionblocktitle", null, $question_array[0]["questionblock_title"]);
3065 }
3066 }
3067 foreach ($question_array as $question) {
3068 if (strlen($question["heading"] ?? "")) {
3069 $a_xml_writer->xmlElement("textblock", null, $question["heading"]);
3070 }
3071 $questionObject = self::_instanciateQuestion($question["question_id"]);
3072 //questionObject contains all the fields from the database. (loadFromDb)
3073 //we don't need the value from svy_qst_oblig table, we already have the values from svy_question table.
3074 //if ($questionObject !== FALSE) $questionObject->insertXML($a_xml_writer, FALSE, $obligatory_states[$question["question_id"]]);
3075 if ($questionObject !== false) {
3076 $questionObject->insertXML($a_xml_writer, false);
3077 }
3078 }
3079 if (count($question_array) > 1) {
3080 $a_xml_writer->xmlEndTag("questionblock");
3081 }
3082 }
3083
3084 $a_xml_writer->xmlEndTag("surveyquestions");
3085 $a_xml_writer->xmlEndTag("surveyobject");
3086 $xml = $a_xml_writer->xmlDumpMem(false);
3087 return $xml;
3088 }
addMaterialTag(ilXmlWriter $a_xml_writer, string $a_material, bool $close_material_tag=true, bool $add_mobs=true, ?array $attribs=null)
Creates an XML material tag from a plain text or xhtml text.
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...

References ILIAS\Survey\Mode\getId(), ILIAS\GlobalScreen\Scope\Footer\Factory\getTitle(), and ILIAS\Repository\int().

+ Here is the call graph for this function:

◆ unfoldQuestionblocks()

ilObjSurvey::unfoldQuestionblocks ( array  $questionblocks)
Parameters
int[]$questionblocksquestion block ids
Todo:
move to survey question manager/repo

Definition at line 1510 of file class.ilObjSurvey.php.

1512 : void {
1513 $ilDB = $this->db;
1514 foreach ($questionblocks as $index) {
1515 $affectedRows = $ilDB->manipulateF(
1516 "DELETE FROM svy_qblk WHERE questionblock_id = %s",
1517 array('integer'),
1518 array($index)
1519 );
1520 $affectedRows = $ilDB->manipulateF(
1521 "DELETE FROM svy_qblk_qst WHERE questionblock_fi = %s AND survey_fi = %s",
1522 array('integer','integer'),
1523 array($index, $this->getSurveyId())
1524 );
1525 }
1526 }

References $ilDB.

◆ update()

ilObjSurvey::update (   $a_upload = false)

Definition at line 228 of file class.ilObjSurvey.php.

228 : bool
229 {
230 if (!$a_upload) {
231 $this->updateMetaData();
232 }
233
234 if (!parent::update()) {
235 return false;
236 }
237
238 // put here object specific stuff
239
240 return true;
241 }

References ilObject\updateMetaData().

+ Here is the call graph for this function:

◆ updateCode()

ilObjSurvey::updateCode ( int  $a_id,
string  $a_email,
string  $a_last_name,
string  $a_first_name,
int  $a_sent 
)
Todo:
move to code manager

Definition at line 4187 of file class.ilObjSurvey.php.

4193 : bool {
4194 $ilDB = $this->db;
4195
4196 $a_email = trim($a_email);
4197
4198 // :TODO:
4199 if (($a_email && !ilUtil::is_email($a_email)) || $a_email === "") {
4200 return false;
4201 }
4202
4203 $data = array("email" => $a_email,
4204 "lastname" => trim($a_last_name),
4205 "firstname" => trim($a_first_name));
4206
4207 $fields = array(
4208 "externaldata" => array("text", serialize($data)),
4209 "sent" => array("integer", $a_sent)
4210 );
4211
4212 $ilDB->update(
4213 "svy_anonymous",
4214 $fields,
4215 array("anonymous_id" => array("integer", $a_id))
4216 );
4217
4218 return true;
4219 }
static is_email(string $a_email, ?ilMailRfc822AddressParserFactory $mailAddressParserFactory=null)
This preg-based function checks whether an e-mail address is formally valid.

◆ updateConjunctionForQuestions()

ilObjSurvey::updateConjunctionForQuestions ( array  $questions,
int  $conjunction 
)
Todo:
move to constraint manager/repo

Definition at line 2224 of file class.ilObjSurvey.php.

2227 : void {
2228 $ilDB = $this->db;
2229 foreach ($questions as $question_id) {
2230 $ilDB->manipulateF(
2231 "UPDATE svy_constraint SET conjunction = %s " .
2232 "WHERE constraint_id IN (SELECT constraint_fi FROM svy_qst_constraint WHERE svy_qst_constraint.question_fi = %s)",
2233 array('integer','integer'),
2234 array($conjunction, $question_id)
2235 );
2236 }
2237 }

References $ilDB.

◆ updateConstraint()

ilObjSurvey::updateConstraint ( int  $precondition_id,
int  $if_question_id,
int  $relation,
float  $value,
int  $conjunction 
)
Todo:
move to constraint manager/repo

Definition at line 2205 of file class.ilObjSurvey.php.

2211 : void {
2212 $ilDB = $this->db;
2213 $ilDB->manipulateF(
2214 "UPDATE svy_constraint SET question_fi = %s, relation_fi = %s, value = %s, conjunction = %s " .
2215 "WHERE constraint_id = %s",
2216 array('integer','integer','float','integer','integer'),
2217 array($if_question_id, $relation, $value, $conjunction, $precondition_id)
2218 );
2219 }

◆ updateOrder()

ilObjSurvey::updateOrder ( array  $a_order)

Definition at line 4165 of file class.ilObjSurvey.php.

4167 : void {
4168 if (count($this->questions) === count($a_order)) {
4169 $this->questions = array_flip($a_order);
4170 $this->saveQuestionsToDb();
4171 }
4172 }

Field Documentation

◆ $access

ilAccessHandler ilObjSurvey::$access
protected

Definition at line 69 of file class.ilObjSurvey.php.

◆ $activation_ending_time

int ilObjSurvey::$activation_ending_time = null
protected

Definition at line 106 of file class.ilObjSurvey.php.

◆ $activation_limited

bool ilObjSurvey::$activation_limited = false
protected

Definition at line 67 of file class.ilObjSurvey.php.

◆ $activation_starting_time

int ilObjSurvey::$activation_starting_time = null
protected

Definition at line 105 of file class.ilObjSurvey.php.

◆ $activation_visibility

bool ilObjSurvey::$activation_visibility = false
protected

Definition at line 104 of file class.ilObjSurvey.php.

◆ $anon_user_list

bool ilObjSurvey::$anon_user_list = false
protected

Definition at line 133 of file class.ilObjSurvey.php.

◆ $anonymize

int ilObjSurvey::$anonymize = 0

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

◆ $author

string ilObjSurvey::$author = ""

A text representation of the authors name.

The name of the author must not necessary be the name of the owner.

Definition at line 81 of file class.ilObjSurvey.php.

◆ $calculate_sum_score

bool ilObjSurvey::$calculate_sum_score = false
protected

Definition at line 71 of file class.ilObjSurvey.php.

◆ $code_manager

ILIAS Survey Code CodeManager ilObjSurvey::$code_manager
protected

Definition at line 139 of file class.ilObjSurvey.php.

◆ $data_manager

ILIAS Survey InternalDataService ilObjSurvey::$data_manager
protected

Definition at line 140 of file class.ilObjSurvey.php.

◆ $display_question_titles

int ilObjSurvey::$display_question_titles = 0

Definition at line 95 of file class.ilObjSurvey.php.

◆ $domain

InternalDomainService ilObjSurvey::$domain
protected

Definition at line 64 of file class.ilObjSurvey.php.

◆ $end_date

string ilObjSurvey::$end_date = ""

Definition at line 89 of file class.ilObjSurvey.php.

◆ $evaluation_access

string ilObjSurvey::$evaluation_access = self::EVALUATION_ACCESS_OFF

Definition at line 85 of file class.ilObjSurvey.php.

◆ $feature_config

Mode FeatureConfig ilObjSurvey::$feature_config
protected

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

◆ $import_manager

ILIAS SurveyQuestionPool Export ImportManager ilObjSurvey::$import_manager
protected

Definition at line 142 of file class.ilObjSurvey.php.

◆ $introduction

string ilObjSurvey::$introduction = ""

Definition at line 82 of file class.ilObjSurvey.php.

◆ $invitation_manager

Participants InvitationsManager ilObjSurvey::$invitation_manager
protected

Definition at line 137 of file class.ilObjSurvey.php.

◆ $mail_confirmation

bool ilObjSurvey::$mail_confirmation = false
protected

Definition at line 131 of file class.ilObjSurvey.php.

◆ $mail_own_results

bool ilObjSurvey::$mail_own_results = false
protected

Definition at line 130 of file class.ilObjSurvey.php.

◆ $mailaddresses

string ilObjSurvey::$mailaddresses = ""

Definition at line 100 of file class.ilObjSurvey.php.

◆ $mailnotification

bool ilObjSurvey::$mailnotification = false

Definition at line 99 of file class.ilObjSurvey.php.

◆ $mailparticipantdata

string ilObjSurvey::$mailparticipantdata = ""

Definition at line 101 of file class.ilObjSurvey.php.

◆ $mode

int ilObjSurvey::$mode = 0
protected

Definition at line 134 of file class.ilObjSurvey.php.

◆ $mode_360_results

int ilObjSurvey::$mode_360_results = 0
protected

Definition at line 112 of file class.ilObjSurvey.php.

◆ $mode_360_self_appr

bool ilObjSurvey::$mode_360_self_appr = false
protected

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

◆ $mode_360_self_eval

bool ilObjSurvey::$mode_360_self_eval = false
protected

Definition at line 109 of file class.ilObjSurvey.php.

◆ $mode_360_self_rate

bool ilObjSurvey::$mode_360_self_rate = false
protected

Definition at line 111 of file class.ilObjSurvey.php.

◆ $mode_self_eval_results

int ilObjSurvey::$mode_self_eval_results = 0
protected

Definition at line 135 of file class.ilObjSurvey.php.

◆ $mode_skill_service

bool ilObjSurvey::$mode_skill_service = false
protected

Definition at line 113 of file class.ilObjSurvey.php.

◆ $outro

string ilObjSurvey::$outro = ""

Definition at line 83 of file class.ilObjSurvey.php.

◆ $placeholder_resolver

ilMailTemplatePlaceholderResolver ilObjSurvey::$placeholder_resolver
protected

Definition at line 143 of file class.ilObjSurvey.php.

◆ $plugin_admin

ilPluginAdmin ilObjSurvey::$plugin_admin
protected

Definition at line 70 of file class.ilObjSurvey.php.

◆ $pool_usage

bool ilObjSurvey::$pool_usage = false

Definition at line 102 of file class.ilObjSurvey.php.

◆ $questions

array ilObjSurvey::$questions = []

Definition at line 91 of file class.ilObjSurvey.php.

◆ $reminder_end

ilDate ilObjSurvey::$reminder_end = null
protected

Definition at line 118 of file class.ilObjSurvey.php.

◆ $reminder_frequency

int ilObjSurvey::$reminder_frequency = 0
protected

Definition at line 119 of file class.ilObjSurvey.php.

◆ $reminder_last_sent

string ilObjSurvey::$reminder_last_sent = null
protected

Definition at line 121 of file class.ilObjSurvey.php.

◆ $reminder_start

ilDate ilObjSurvey::$reminder_start = null
protected

Definition at line 117 of file class.ilObjSurvey.php.

◆ $reminder_status

bool ilObjSurvey::$reminder_status = false
protected

Definition at line 116 of file class.ilObjSurvey.php.

◆ $reminder_target

int ilObjSurvey::$reminder_target = 0
protected

Definition at line 120 of file class.ilObjSurvey.php.

◆ $reminder_tmpl

int ilObjSurvey::$reminder_tmpl = null
protected

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

◆ $start_date

string ilObjSurvey::$start_date = ""

Definition at line 87 of file class.ilObjSurvey.php.

◆ $survey_id

int ilObjSurvey::$survey_id = 0

A unique positive numerical ID which identifies the survey.

This is the primary key from a database table.

Definition at line 76 of file class.ilObjSurvey.php.

◆ $survey_service

ILIAS Survey InternalService ilObjSurvey::$survey_service
protected

Definition at line 138 of file class.ilObjSurvey.php.

◆ $surveyCodeSecurity

bool ilObjSurvey::$surveyCodeSecurity = false

Definition at line 97 of file class.ilObjSurvey.php.

◆ $svy_log

ilLogger ilObjSurvey::$svy_log
protected

Definition at line 66 of file class.ilObjSurvey.php.

◆ $tutor_ntf_recipients

array ilObjSurvey::$tutor_ntf_recipients = []
protected

Definition at line 124 of file class.ilObjSurvey.php.

◆ $tutor_ntf_status

bool ilObjSurvey::$tutor_ntf_status = false
protected

Definition at line 123 of file class.ilObjSurvey.php.

◆ $tutor_ntf_target

int ilObjSurvey::$tutor_ntf_target = 0
protected

Definition at line 125 of file class.ilObjSurvey.php.

◆ $tutor_res_recipients

array ilObjSurvey::$tutor_res_recipients = []
protected

Definition at line 127 of file class.ilObjSurvey.php.

◆ $tutor_res_status

bool ilObjSurvey::$tutor_res_status = false
protected

Definition at line 126 of file class.ilObjSurvey.php.

◆ $user

ilObjUser ilObjSurvey::$user
protected

Definition at line 68 of file class.ilObjSurvey.php.

◆ $view_own_results

bool ilObjSurvey::$view_own_results = false
protected

Definition at line 129 of file class.ilObjSurvey.php.

◆ ANONYMIZE_CODE_ALL

const ilObjSurvey::ANONYMIZE_CODE_ALL = 3

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

Referenced by ilObjSurveyGUI\afterSave().

◆ ANONYMIZE_FREEACCESS

const ilObjSurvey::ANONYMIZE_FREEACCESS = 2

Definition at line 34 of file class.ilObjSurvey.php.

◆ ANONYMIZE_OFF

const ilObjSurvey::ANONYMIZE_OFF = 0

Definition at line 32 of file class.ilObjSurvey.php.

Referenced by __construct().

◆ ANONYMIZE_ON

const ilObjSurvey::ANONYMIZE_ON = 1

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

◆ EVALUATION_ACCESS_ALL

const ilObjSurvey::EVALUATION_ACCESS_ALL = "1"

Definition at line 29 of file class.ilObjSurvey.php.

Referenced by ilSurveyEvaluationGUI\evaluation().

◆ EVALUATION_ACCESS_OFF

const ilObjSurvey::EVALUATION_ACCESS_OFF = "0"

Definition at line 28 of file class.ilObjSurvey.php.

Referenced by __construct(), and ilSurveyEvaluationGUI\evaluation().

◆ EVALUATION_ACCESS_PARTICIPANTS

const ilObjSurvey::EVALUATION_ACCESS_PARTICIPANTS = "2"

◆ MODE_360

◆ MODE_IND_FEEDB

◆ MODE_SELF_EVAL

◆ MODE_STANDARD

const ilObjSurvey::MODE_STANDARD = 0

Definition at line 45 of file class.ilObjSurvey.php.

Referenced by __construct(), and ilObjSurveyGUI\getTabs().

◆ NOTIFICATION_APPRAISEES

const ilObjSurvey::NOTIFICATION_APPRAISEES = 3

Definition at line 61 of file class.ilObjSurvey.php.

◆ NOTIFICATION_APPRAISEES_AND_RATERS

const ilObjSurvey::NOTIFICATION_APPRAISEES_AND_RATERS = 5

◆ NOTIFICATION_INVITED_USERS

const ilObjSurvey::NOTIFICATION_INVITED_USERS = 2

Definition at line 60 of file class.ilObjSurvey.php.

◆ NOTIFICATION_PARENT_COURSE

const ilObjSurvey::NOTIFICATION_PARENT_COURSE = 1

Definition at line 59 of file class.ilObjSurvey.php.

◆ NOTIFICATION_RATERS

const ilObjSurvey::NOTIFICATION_RATERS = 4

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

◆ PRINT_HIDE_LABELS

const ilObjSurvey::PRINT_HIDE_LABELS = 1

◆ PRINT_SHOW_LABELS

const ilObjSurvey::PRINT_SHOW_LABELS = 3

◆ QUESTIONTITLES_HIDDEN

const ilObjSurvey::QUESTIONTITLES_HIDDEN = 0

Definition at line 37 of file class.ilObjSurvey.php.

◆ QUESTIONTITLES_VISIBLE

const ilObjSurvey::QUESTIONTITLES_VISIBLE = 1

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

Referenced by __construct().

◆ RESULTS_360_ALL

const ilObjSurvey::RESULTS_360_ALL = 2

◆ RESULTS_360_NONE

const ilObjSurvey::RESULTS_360_NONE = 0

Definition at line 55 of file class.ilObjSurvey.php.

◆ RESULTS_360_OWN

const ilObjSurvey::RESULTS_360_OWN = 1

Definition at line 56 of file class.ilObjSurvey.php.

◆ RESULTS_SELF_EVAL_ALL

◆ RESULTS_SELF_EVAL_NONE

const ilObjSurvey::RESULTS_SELF_EVAL_NONE = 0

Definition at line 51 of file class.ilObjSurvey.php.

◆ RESULTS_SELF_EVAL_OWN

const ilObjSurvey::RESULTS_SELF_EVAL_OWN = 1

Definition at line 52 of file class.ilObjSurvey.php.

Referenced by __construct().


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