diff --git a/classes/TandemMatching.class.php b/classes/TandemMatching.class.php index 5f4f50577ab4a970cba32375623fbfb88d52954b..333228384b712350b19d8b554c4b4aeab2933870 100644 --- a/classes/TandemMatching.class.php +++ b/classes/TandemMatching.class.php @@ -76,8 +76,19 @@ class TandemMatching AND tuml.user_id <> :user_id AND tandem_profiles.target_language_id IN ( :request_user_mother_language_ids ) '; if (Config::get()->TANDEMPLUGIN_USE_LEVEL) { - $sql .= "AND tuml.`level` IN ( :levels ) "; - $sql_params['levels'] = self::getEqualOrHigherLevels($tandem_request->level); + $sql .= "AND tuml.`level` IN ( :other_minimum_levels ) "; + //Check which level is higher: The requested one or the one of the user. + $user_and_higher_levels = self::getEqualOrHigherLevels($tandem_request->level); + if ($tandem_request->requested_level) { + $requested_and_higher_levels = self::getEqualOrHigherLevels($tandem_request->requested_level); + //Use the level array that has the least entries so that no lower levels as the requested + //ones are used. + $sql_params['other_minimum_levels'] = count($user_and_higher_levels) < count($requested_and_higher_levels) + ? $user_and_higher_levels : $requested_and_higher_levels; + } else { + //Easy: Use the level of the user. + $sql_params['other_minimum_levels'] = $user_and_higher_levels; + } } //We must check, if there are tandem pairs. Profiles in tandem pairs diff --git a/controllers/profile.php b/controllers/profile.php index 18f89f6f2558e40797643a5eab4040ea2f6a1dba..ad734b23cccc779984305db0c0d4c66fa182220e 100644 --- a/controllers/profile.php +++ b/controllers/profile.php @@ -74,6 +74,7 @@ class ProfileController extends PluginController //Read all attributes: $this->target_language_id = Request::get('target_language_id', null); $this->level = Request::get('level', null); + $this->requested_level = Request::get('requested_level', ''); $this->comment = Request::get('comment', ''); $this->gender = Request::get('gender', ''); if (Config::get()->TANDEMPLUGIN_PROOF_FIELDS_ENABLED) { @@ -150,6 +151,7 @@ class ProfileController extends PluginController //the following is common for add and edit mode: $this->tandem_profile->target_language_id = $this->target_language_id; $this->tandem_profile->level = $this->level; + $this->tandem_profile->requested_level = $this->requested_level; $this->tandem_profile->comment = $this->comment; $this->tandem_profile->gender = $this->gender; @@ -255,6 +257,7 @@ class ProfileController extends PluginController //edit mode $this->target_language_id = $this->tandem_profile->target_language_id; $this->level = $this->tandem_profile->level; + $this->requested_level = $this->tandem_profile->requested_level; $this->comment = $this->tandem_profile->comment; $this->gender = $this->tandem_profile->gender; @@ -266,6 +269,7 @@ class ProfileController extends PluginController //add mode $this->target_language_id = ''; $this->level = 'A1'; + $this->requested_level = ''; $this->comment = ''; $this->gender = ''; diff --git a/migrations/11_add_requested_level.php b/migrations/11_add_requested_level.php new file mode 100644 index 0000000000000000000000000000000000000000..caaa9945d080b88a5ec1032237046388f41c8bc0 --- /dev/null +++ b/migrations/11_add_requested_level.php @@ -0,0 +1,23 @@ +<?php + + +class AddRequestedLevel extends Migration +{ + protected function up() + { + $db = DBManager::get(); + $db->exec( + "ALTER TABLE `tandem_profiles` + ADD COLUMN requested_level VARCHAR(2) NOT NULL DEFAULT ''" + ); + } + + + protected function down() + { + $db = DBManager::get(); + $db->exec( + "ALTER TABLE `tandem_profiles` DROP COLUMN requested_level" + ); + } +} diff --git a/models/TandemProfile.class.php b/models/TandemProfile.class.php index defd7597b553fc7ff957ba317b63a8d740166bc6..3ccfa4fe8d41452a9fbaef2e1726084b81564a3c 100644 --- a/models/TandemProfile.class.php +++ b/models/TandemProfile.class.php @@ -26,6 +26,7 @@ require_once(__DIR__ . '/TandemUserMotherLanguage.class.php'); * @property string target_language_id A reference to a language entry. * @property string level The language level that represents the user's skills in the target language: * A1, A2, B1, B2, C1 or C2 + * @property string requested_level The language level that the user requests for their tandem partner. * @property string comment * @property string gender * @property string proof_of_achievement @@ -59,7 +60,7 @@ require_once(__DIR__ . '/TandemUserMotherLanguage.class.php'); { return $this->target_language->getLocalName() . ' (' - . $this->level + . ($this->requested_level ?: $this->level) . ')'; } diff --git a/plugin.manifest b/plugin.manifest index b23018aa6131b5ad7e63caf8f8e1a275470aa05c..394112baa42d835b3a13cc36c9969a7b95265995 100644 --- a/plugin.manifest +++ b/plugin.manifest @@ -1,7 +1,7 @@ pluginname=TandemPlugin pluginclassname=TandemPlugin origin=data-quest -version=1.3.0 +version=1.3.1 description=Dieses Plugin ermöglicht es, Sprachtandems innerhalb der Stud.IP Platform zu bilden. studipMinVersion=4.0 studipMaxVersion=5.9.99 diff --git a/views/profile/_add_edit_form.php b/views/profile/_add_edit_form.php index 1779ca0ab9ec4356b035ecd307af19b6701d04b3..b53a4c19526aefbfdf9778e7f941c30524534690 100644 --- a/views/profile/_add_edit_form.php +++ b/views/profile/_add_edit_form.php @@ -29,6 +29,20 @@ <option value="C2" <?= ($level == 'C2' ? 'selected="selected"' : '' ) ?>>C2</option> </select> </label> + <label> + <?= dgettext('TandemPlugin', 'Auf welcher Niveaustufe soll die andere Person die gesuchte Sprache mindestens beherrschen?') ?> + <select name="requested_level"> + <option value="" <?= !$requested_level ? 'selected' : '' ?>> + <?= dgettext('TandemPlugin', 'Keine Auswahl') ?> + </option> + <option value="A1" <?= $requested_level == 'A1' ? 'selected' : '' ?>>A1</option> + <option value="A2" <?= $requested_level == 'A2' ? 'selected' : '' ?>>A2</option> + <option value="B1" <?= $requested_level == 'B1' ? 'selected' : '' ?>>B1</option> + <option value="B2" <?= $requested_level == 'B2' ? 'selected' : '' ?>>B2</option> + <option value="C1" <?= $requested_level == 'C1' ? 'selected' : '' ?>>C1</option> + <option value="C2" <?= $requested_level == 'C2' ? 'selected' : '' ?>>C2</option> + </select> + </label> <p><?= dgettext('TandemPlugin', 'Hinweis: Dies ist eine Selbsteinschätzung des Sprachniveaus. Es handelt sich nicht um die Einstufung des Fachsprachenzentrums!') ?></p> </p> <label>