diff --git a/rule/eventnotification/rule_form.php b/rule/eventnotification/rule_form.php index 5bd9b24b..b1a7aec5 100644 --- a/rule/eventnotification/rule_form.php +++ b/rule/eventnotification/rule_form.php @@ -45,7 +45,7 @@ public function rule_definition() { $mform->addElement('select', 'param2', get_string('from'), $options); // Recipient. - $grp = array(); + $grp = []; $grp[] = &$mform->createElement('checkbox', 'author', null, get_string('author', 'datalynx'), array('size' => 1)); $options = array('multiple' => true); diff --git a/rule/ftpsyncfiles/lang/de/datalynxrule_ftpsyncfiles.php b/rule/ftpsyncfiles/lang/de/datalynxrule_ftpsyncfiles.php index 37ce742f..0adb06d1 100644 --- a/rule/ftpsyncfiles/lang/de/datalynxrule_ftpsyncfiles.php +++ b/rule/ftpsyncfiles/lang/de/datalynxrule_ftpsyncfiles.php @@ -31,3 +31,9 @@ $string['sftppassword'] = 'STFP Passwort'; $string['sftppath'] = 'STFP Path'; $string['sftpport'] = 'STFP Port'; + +$string['matchfields'] = 'Importierte Daten entsprechend den Formularfeldern zuordnen'; +$string['identifier'] = 'Im Dateinamen verwendetes Identifikationsmerkmal, um die Datei dem richtigen User zuzuordnen'; +$string['teammemberfield'] = 'Formularfeld, das verwendet wird um den User zu bestimmen, dem die Datei zugeordnet werden soll'; +$string['manager'] = 'Der User, der die Einträge verwaltet'; +$string['filefield'] = 'Feld in dem die Datei gespeichert werden soll'; diff --git a/rule/ftpsyncfiles/lang/en/datalynxrule_ftpsyncfiles.php b/rule/ftpsyncfiles/lang/en/datalynxrule_ftpsyncfiles.php index 39c145e9..71ec1165 100644 --- a/rule/ftpsyncfiles/lang/en/datalynxrule_ftpsyncfiles.php +++ b/rule/ftpsyncfiles/lang/en/datalynxrule_ftpsyncfiles.php @@ -31,3 +31,9 @@ $string['sftppassword'] = 'STFP Password'; $string['sftppath'] = 'STFP Path'; $string['sftpport'] = 'STFP Port'; + +$string['matchfields'] = 'Match imported data to the matching form fields'; +$string['identifier'] = 'Identifier used in the filename to match a specific user.'; +$string['teammemberfield'] = 'Form field to use for selecting the user the file is assigned to'; +$string['manager'] = 'User who manages all entries'; +$string['filefield'] = 'Field where the file should be saved'; diff --git a/rule/ftpsyncfiles/rule_class.php b/rule/ftpsyncfiles/rule_class.php index fcc2e179..c6dc45c6 100644 --- a/rule/ftpsyncfiles/rule_class.php +++ b/rule/ftpsyncfiles/rule_class.php @@ -71,6 +71,12 @@ class datalynx_rule_ftpsyncfiles extends datalynx_rule_base { * @var false|int */ private $draftitemid; + /** + * @var mixed + */ + private array $sftpsetting; + private int $filefieldid; + private array $files; /** * Class constructor @@ -80,14 +86,16 @@ class datalynx_rule_ftpsyncfiles extends datalynx_rule_base { */ public function __construct($df = 0, $rule = 0) { parent::__construct($df, $rule); - $this->sftpserver = $this->rule->param2; - $this->sftpport = $this->rule->param3; - $this->sftpusername = $this->rule->param4; - $this->sftppassword = $this->rule->param10; - $this->sftppath = $this->rule->param6; + $this->sftpsetting = unserialize($this->rule->param2); + $this->sftpserver = $this->sftpsetting['sftpserver']; + $this->sftpport = $this->sftpsetting['sftpport']; + $this->sftpusername = $this->sftpsetting['sftpusername']; + $this->sftppassword = $this->sftpsetting['sftppassword']; + $this->sftppath = $this->sftpsetting['sftppath']; $this->matchingfield = $this->rule->param7; $this->teammemberfieldid = $this->rule->param8; $this->authorid = $this->rule->param9; + $this->filefieldid = $this->rule->param3; } /** @@ -96,7 +104,7 @@ public function __construct($df = 0, $rule = 0) { */ public function trigger(\core\event\base $event) { - global $CFG, $DB, $USER; + global $CFG, $USER; require_once("$CFG->dirroot/mod/datalynx/classes/datalynx.php"); require_once("$CFG->dirroot/mod/datalynx/field/entryauthor/field_class.php"); require_once("$CFG->dirroot/mod/datalynx/entries_class.php"); @@ -107,20 +115,14 @@ public function trigger(\core\event\base $event) { $did = $event->get_data()['objectid']; $this->dl = new mod_datalynx\datalynx($did); - // Download Server files. - $this->draftitemid = file_get_unused_draft_itemid(); - $this->fs = get_file_storage(); $this->download_files((int)$did); $context = context_user::instance($USER->id); - $files = $this->fs->get_area_files($context->id, 'mod_datalynx', 'draft', $this->draftitemid); - - // fieldid? - // für welchen user? + // $files = $this->fs->get_area_files($context->id, 'mod_datalynx', 'draft', $this->draftitemid); - if (!empty($files)) { + if (!empty($this->files)) { foreach ($files as $file) { $data = new stdClass(); @@ -133,11 +135,11 @@ public function trigger(\core\event\base $event) { $data->eids[$entryid] = $entryid; // TODO: If filename is not userid get userid here. $data->{"field_{$fieldid}_{$entryid}"} = $this->authorid; - $data->{"field_{$fieldid}_{$entryid}_filemanager"} = $this->draftitemid; - $data->{"field_{$fieldid}_{$entryid}_content"} = 1; + $data->{"field_{$this->filefieldid}_{$entryid}_filemanager"} = $this->draftitemid; + $data->{"field_{$this->filefieldid}_{$entryid}_content"} = 1; $dlentries = new datalynx_entries($this->dl); // Set teammember from filename. - $data->{"field_{$this->teammemberfieldid}_{$entryid}"} = $this->get_userid_from_filename($filename); + $data->{"field_{$this->teammemberfieldid}_{$entryid}"} = [$this->get_userid_from_filename($filename)]; $processed = $dlentries->process_entries('update', $data->eids, $data, true); } } @@ -151,7 +153,7 @@ public function trigger(\core\event\base $event) { * @return void */ private function download_files(int $did): void { - global $CFG, $USER; + global $USER; $server = $this->sftpserver; $remotedir = $this->sftppath; $username = $this->sftpusername; @@ -197,12 +199,13 @@ private function download_files(int $did): void { if ($filedata !== false) { // TODO: Store Data in Moodle. - $file = $this->fs->create_file_from_string( + $draftitemid = file_get_unused_draft_itemid(); + $this->files[$draftitemid] = $this->fs->create_file_from_string( [ 'contextid' => $context->id, // Replace with the appropriate context if necessary. 'component' => 'mod_datalynx', 'filearea' => 'draft', - 'itemid' => $this->draftitemid, + 'itemid' => $draftitemid, 'filepath' => '/', 'filename' => $filename, ], diff --git a/rule/ftpsyncfiles/rule_form.php b/rule/ftpsyncfiles/rule_form.php index 9840a7d5..867811dc 100644 --- a/rule/ftpsyncfiles/rule_form.php +++ b/rule/ftpsyncfiles/rule_form.php @@ -34,19 +34,52 @@ public function rule_definition() { $mform->addElement('header', 'settingshdr', get_string('sftpsettings', 'datalynxrule_ftpsyncfiles')); - $mform->addElement('text', 'param2', get_string('sftpserver', 'datalynxrule_ftpsyncfiles')); + + $mform->addElement('hidden', 'param2', ''); $mform->setType('param2', PARAM_TEXT); - $mform->addElement('text', 'param3', get_string('sftpport', 'datalynxrule_ftpsyncfiles')); - $mform->setType('param3', PARAM_INT); - $mform->addElement('text', 'param4', get_string('sftpusername', 'datalynxrule_ftpsyncfiles')); - $mform->setType('param4', PARAM_TEXT); - $mform->addElement('text', 'param10', get_string('sftppassword', 'datalynxrule_ftpsyncfiles')); - $mform->setType('param10', PARAM_TEXT); - $mform->addElement('text', 'param6', get_string('sftppath', 'datalynxrule_ftpsyncfiles')); - $mform->setType('param6', PARAM_SAFEPATH); - $mform->addElement('header', 'settingsprofile', get_string('fields', 'datalynx')); + + // SFTP connection and credentials. Save in param2 as serialized data. + $grp = []; + $grp[] = &$mform->createElement('static', '', '', + "
" . get_string('sftpserver', 'datalynxrule_ftpsyncfiles') . ""); + $grp[] = &$mform->createElement('text', 'sftpserver', null, + get_string('sftpserver', 'datalynxrule_ftpsyncfiles')); + + $grp[] = &$mform->createElement('static', '', '', + "
" . get_string('sftpport', 'datalynxrule_ftpsyncfiles') . ""); + $grp[] = &$mform->createElement('text', 'sftpport', + get_string('sftpport', 'datalynxrule_ftpsyncfiles')); + + $grp[] = &$mform->createElement('static', '', '', + "
" . get_string('sftpusername', 'datalynxrule_ftpsyncfiles') . ""); + $grp[] = &$mform->createElement('text', 'sftpusername', + get_string('sftpusername', 'datalynxrule_ftpsyncfiles')); + + $grp[] = &$mform->createElement('static', '', '', + "
" . get_string('sftppassword', 'datalynxrule_ftpsyncfiles') . ""); + $grp[] = &$mform->createElement('text', 'sftppassword', + get_string('sftppassword', 'datalynxrule_ftpsyncfiles')); + + $grp[] = &$mform->createElement('static', '', '', + "
" . get_string('sftppath', 'datalynxrule_ftpsyncfiles') . ""); + $grp[] = &$mform->createElement('text', 'sftppath', + get_string('sftppath', 'datalynxrule_ftpsyncfiles')); + + $mform->addGroup($grp, 'sftpgrp', + get_string('sftpsettings', 'datalynxrule_ftpsyncfiles'), $br, false); + + $mform->setType('sftppath', PARAM_SAFEPATH); + $mform->setType('sftpserver', PARAM_TEXT); + $mform->setType('sftppassword', PARAM_TEXT); + $mform->setType('sftpport', PARAM_INT); + $mform->setType('sftpusername', PARAM_TEXT); + + $mform->addElement('header', 'settingsprofile', + get_string('matchfields', 'datalynxrule_ftpsyncfiles')); + $standardfields = array('idnumber' => 'idnumber', 'email' => 'email', 'id' => 'id', 'username' => 'username'); - $mform->addElement('autocomplete', 'param7', get_string('profilefields', 'core_admin'), + $mform->addElement('autocomplete', 'param7', + get_string('identifier', 'datalynxrule_ftpsyncfiles'), $standardfields); $fields = $this->_df->get_fields(null, false, true); @@ -58,18 +91,24 @@ public function rule_definition() { } asort($fieldnames); $options = array('multiple' => false); - $mform->addElement('autocomplete', 'param8', get_string('teammemberselect', 'datalynx'), - $fieldnames, $options); + $mform->addElement('autocomplete', 'param8', + get_string('teammemberfield', 'datalynxrule_ftpsyncfiles'), $fieldnames, $options); $potentialusers = get_users_by_capability($this->_df->context, 'mod/datalynx:manageentries'); $choosuser = []; foreach ($potentialusers as $user) { $choosuser[$user->id] = $user->firstname . ' ' . $user->lastname; } - $mform->addElement('autocomplete', 'param9', get_string('user'), - $choosuser, $options); + $mform->addElement('autocomplete', 'param9', + get_string('manager', 'datalynxrule_ftpsyncfiles'), $choosuser, $options); + + $fields = $this->_df->get_fields_by_type('file', true); + $mform->addElement('autocomplete', 'param3', + get_string('filefield', 'datalynxrule_ftpsyncfiles'), $fields, $options); } /** + * @param $data + * @return void */ public function data_preprocessing(&$data) { } @@ -77,13 +116,51 @@ public function data_preprocessing(&$data) { /** */ public function set_data($data) { - $this->data_preprocessing($data); + $sftpsetting = unserialize($data->param2); + if (isset($sftpsetting['sftpserver'])) { + $data->sftpserver = $sftpsetting['sftpserver']; + } + if (isset($sftpsetting['sftpport'])) { + $data->sftpport = $sftpsetting['sftpport']; + } + if (isset($sftpsetting['sftpusername'])) { + $data->sftpusername = $sftpsetting['sftpusername']; + } + if (isset($sftpsetting['sftppassword'])) { + $data->sftppassword = $sftpsetting['sftppassword']; + } + if (isset($sftpsetting['sftppath'])) { + $data->sftppath = $sftpsetting['sftppath']; + } parent::set_data($data); } /** + * @param $slashed + * @return object */ public function get_data($slashed = true) { - return parent::get_data($slashed); + $data = parent::get_data($slashed); + $sftpsetting = []; + if (isset($data->sftpserver)) { + $sftpsetting['sftpserver'] = $data->sftpserver; + } + if (isset($data->sftpport)) { + $sftpsetting['sftpport'] = $data->sftpport; + } + if (isset($data->sftpusername)) { + $sftpsetting['sftpusername'] = $data->sftpusername; + } + if (isset($data->sftppassword)) { + $sftpsetting['sftppassword'] = $data->sftppassword; + } + if (isset($data->sftppath)) { + $sftpsetting['sftppath'] = $data->sftppath; + } + // Aggregate all form fields into param2 table field. + if (isset($sftpsetting) && isset($data)) { + $data->param2 = serialize($sftpsetting); + } + return $data; } }