From 3bcb9784a6cbd48afbd7d3d3bc4dc163ee3898a5 Mon Sep 17 00:00:00 2001 From: Mo Farouk <122031508+fmido88@users.noreply.github.com> Date: Mon, 13 Nov 2023 15:34:56 +0200 Subject: [PATCH] v4 --- CHANGELOG.md | 9 + classes/deleteselectedusers_operation.php | 4 +- classes/editselectedusers_operation.php | 2 +- classes/form/charger_form.php | 65 ++- classes/form/coupons_generator.php | 4 +- classes/form/enrol_form.php | 2 +- classes/observer.php | 2 +- classes/privacy/provider.php | 2 +- classes/transactions.php | 23 +- classes/uploadcoupon/processor.php | 8 +- classes/uploadcoupon/tracker.php | 18 +- classes/wordpress.php | 4 +- cli/sync.php | 4 +- db/access.php | 30 +- db/events.php | 8 +- db/tasks.php | 6 +- extendlib.php | 2 +- externallib.php | 10 +- extra/bulkedit.php | 8 +- extra/bulkinstances.php | 11 +- extra/charger.php | 11 +- extra/coupontable.php | 8 +- extra/couponusage.php | 14 +- extra/referral.php | 4 +- extra/transaction.php | 6 +- lang/ar/enrol_wallet.php | 559 ++++++++++++++++++++++ lang/en/enrol_wallet.php | 12 +- lib.php | 90 +++- locallib.php | 27 +- settings.php | 55 ++- tests/enrol_wallet_test.php | 288 +++++------ tests/externallib_test.php | 38 +- tests/notifications_test.php | 3 +- tests/observer_test.php | 10 +- tests/payment/service_provider_test.php | 20 +- tests/transactions_test.php | 8 +- tests/turn_non_refundable_test.php | 5 +- version.php | 2 +- wplogin.php | 11 +- 39 files changed, 1039 insertions(+), 354 deletions(-) create mode 100644 lang/ar/enrol_wallet.php diff --git a/CHANGELOG.md b/CHANGELOG.md index 8c39ed4c..4cbecfec 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,14 @@ # Wallet Enrollment for Moodle # ========== +## V 4.0.0 ## +- Many fixes. +- Improve the validation of forms. +- Add new types of coupons. +- Add coupons usage page. +- Add repurchase option. +- Improve filtrations of transaction table and coupons tables. +- After creating coupons, redirect to coupons table with only the newly created coupons displayed. + ## V 3.1.0 ## - Add Referral program. - Fix some bugs. diff --git a/classes/deleteselectedusers_operation.php b/classes/deleteselectedusers_operation.php index 1a16fdd4..231cf8f1 100644 --- a/classes/deleteselectedusers_operation.php +++ b/classes/deleteselectedusers_operation.php @@ -59,8 +59,8 @@ public function get_title() { * @return \enrol_wallet\deleteselectedusers_form */ public function get_form($defaultaction = null, $defaultcustomdata = null) { - if (!array($defaultcustomdata)) { - $defaultcustomdata = array(); + if (!is_array($defaultcustomdata)) { + $defaultcustomdata = []; } $defaultcustomdata['title'] = $this->get_title(); $defaultcustomdata['message'] = get_string('confirmbulkdeleteenrolment', 'enrol_wallet'); diff --git a/classes/editselectedusers_operation.php b/classes/editselectedusers_operation.php index 6b3bf634..819eef91 100644 --- a/classes/editselectedusers_operation.php +++ b/classes/editselectedusers_operation.php @@ -134,7 +134,7 @@ public function process(\course_enrolment_manager $manager, array $users, \stdCl 'courseid' => $enrolment->courseid, 'context' => \context_course::instance($enrolment->courseid), 'relateduserid' => $user->id, - 'other' => ['enrol' => 'wallet'] + 'other' => ['enrol' => 'wallet'], ] ); $event->trigger(); diff --git a/classes/form/charger_form.php b/classes/form/charger_form.php index 686fe968..450d7a3d 100644 --- a/classes/form/charger_form.php +++ b/classes/form/charger_form.php @@ -63,12 +63,20 @@ public function definition() { } } + if (file_exists($CFG->dirroot.'/blocks/vc/lib.php') + && !empty($this->_customdata['vc']) + && function_exists('block_vc_extend_credit_form')) { + + require_once($CFG->dirroot.'/blocks/vc/lib.php'); + block_vc_extend_credit_form($mform, $this->get_data()); + } + $mform->addElement('header', 'main', get_string('chargingoptions', 'enrol_wallet')); $operations = [ 'credit' => 'credit', 'debit' => 'debit', - 'balance' => 'balance' + 'balance' => 'balance', ]; $oplabel = get_string('chargingoperation', 'enrol_wallet'); $attr = !empty($i) ? ['id' => 'charge-operation', 'onchange' => 'calculateCharge()'] : []; @@ -104,10 +112,9 @@ public function definition() { 'courseid' => $courseid, 'enrolid' => 0, 'perpage' => $CFG->maxusersperpage, - 'userfields' => implode(',', \core_user\fields::get_identity_fields($context, true)) + 'userfields' => implode(',', \core_user\fields::get_identity_fields($context, true)), ]; $mform->addElement('autocomplete', 'userlist', get_string('selectusers', 'enrol_manual'), [], $options); - $mform->addRule('userlist', 'select user', 'required', null, 'client'); $mform->addElement('submit', 'submit', get_string('submit')); @@ -168,30 +175,40 @@ public function validation($data, $files) { global $DB; $errors = parent::validation($data, $files); - $op = $data['op']; - if (!in_array($op, ['credit', 'debit', 'balance'])) { - $errors['op'] = get_string('charger_invalid_operation', 'enrol_wallet'); - return $errors; - } + if (!empty($data['submit'])) { + if (empty($data['userlist'])) { + $errors['userlist'] = get_string('selectuser', 'enrol_wallet'); + } - $value = $data['value'] ?? ''; - $userid = $data['userlist']; - // No value. - if (empty($value) && ($op !== 'balance')) { - $errors['value'] = get_string('charger_novalue', 'enrol_wallet'); - } + $op = $data['op']; + if (!in_array($op, ['credit', 'debit', 'balance'])) { + $errors['op'] = get_string('charger_invalid_operation', 'enrol_wallet'); + return $errors; + } - // No user. - if (empty($userid) || !$DB->record_exists('user', ['id' => $userid])) { - $errors['userlist'] = get_string('charger_nouser', 'enrol_wallet'); - } + $value = $data['value'] ?? ''; + $userid = $data['userlist']; + // No value. + if (empty($value) && ($op !== 'balance')) { + $errors['value'] = get_string('charger_novalue', 'enrol_wallet'); + } + + // No user. + if (empty($userid) || !$DB->record_exists('user', ['id' => $userid])) { + $errors['userlist'] = get_string('charger_nouser', 'enrol_wallet'); + } - $transactions = new \enrol_wallet\transactions; - $before = $transactions->get_user_balance($userid); - if ($op == 'debit' && $value > $before) { - // Cannot deduct more than the user's balance. - $a = ['value' => $value, 'before' => $before]; - $errors['value'] = get_string('charger_debit_err', 'enrol_wallet', $a); + $transactions = new \enrol_wallet\transactions; + $before = $transactions->get_user_balance($userid); + if ($op == 'debit' && $value > $before) { + // Cannot deduct more than the user's balance. + $a = ['value' => $value, 'before' => $before]; + $errors['value'] = get_string('charger_debit_err', 'enrol_wallet', $a); + } + + } else if (!empty($data['submitvc'])) { + // TODO add validation function to vc block. + return $errors; } return $errors; diff --git a/classes/form/coupons_generator.php b/classes/form/coupons_generator.php index fadc6dd7..7b5ef6a1 100644 --- a/classes/form/coupons_generator.php +++ b/classes/form/coupons_generator.php @@ -105,8 +105,8 @@ public function definition() { $mform->addHelpButton('maxperuser', 'coupons_maxperuser', 'enrol_wallet'); $mform->setDefault('maxperuser', 0); - $mform->addElement('date_time_selector', 'validfrom', get_string('validfrom', 'enrol_wallet'), array('optional' => true)); - $mform->addElement('date_time_selector', 'validto', get_string('validto', 'enrol_wallet'), array('optional' => true)); + $mform->addElement('date_time_selector', 'validfrom', get_string('validfrom', 'enrol_wallet'), ['optional' => true]); + $mform->addElement('date_time_selector', 'validto', get_string('validto', 'enrol_wallet'), ['optional' => true]); $group = []; $group[] = $mform->createElement('checkbox', 'upper', get_string('upperletters', 'enrol_wallet')); diff --git a/classes/form/enrol_form.php b/classes/form/enrol_form.php index 6e077edf..23ad4bb0 100644 --- a/classes/form/enrol_form.php +++ b/classes/form/enrol_form.php @@ -78,7 +78,7 @@ public function definition() { 'credit_cost' => $costbefore, 'user_balance' => $balance, 'after_discount' => $costafter, - 'currency' => $currency + 'currency' => $currency, ]; // Display cost and balance. if ($balance >= $costafter) { diff --git a/classes/observer.php b/classes/observer.php index dccf2600..768205f3 100644 --- a/classes/observer.php +++ b/classes/observer.php @@ -113,7 +113,7 @@ public static function wallet_completion_awards(\core\event\course_completed $ev 'maxgrade' => $maxgrade, 'percent' => $percentage, 'amount' => $award, - 'timecreated' => time() + 'timecreated' => time(), ]; $id = $DB->insert_record('enrol_wallet_awards', $data); diff --git a/classes/privacy/provider.php b/classes/privacy/provider.php index 971ace7e..91f0b2a1 100644 --- a/classes/privacy/provider.php +++ b/classes/privacy/provider.php @@ -303,7 +303,7 @@ public static function delete_data_for_user(approved_contextlist $contextlist) { $ids = $DB->get_records('payments', [ 'component' => 'enrol_wallet', 'paymentarea' => 'wallettopup', - 'userid' => $contextlist->get_user()->id + 'userid' => $contextlist->get_user()->id, ]); foreach ($ids as $payment) { $DB->delete_records('enrol_wallet_items', ['id' => $payment->itemid, 'userid' => $payment->userid]); diff --git a/classes/transactions.php b/classes/transactions.php index 4feb2f3c..a2eabc30 100644 --- a/classes/transactions.php +++ b/classes/transactions.php @@ -106,7 +106,7 @@ public static function payment_topup($amount, $userid, $description = '', $charg 'balance' => $newbalance, 'norefund' => $refundable ? $oldnotrefund : $amount + $oldnotrefund, 'descripe' => $description, - 'timecreated' => time() + 'timecreated' => time(), ]; $id = $DB->insert_record('enrol_wallet_transactions', $recorddata); @@ -208,7 +208,7 @@ public static function debit( 'balance' => $newbalance, 'norefund' => ($newbalance >= $oldnotrefund) ? $oldnotrefund : $newbalance, 'descripe' => $description, - 'timecreated' => time() + 'timecreated' => time(), ]; $id = $DB->insert_record('enrol_wallet_transactions', $recorddata); @@ -532,7 +532,8 @@ public static function validate_coupon($coupondata, $area = []) { } // Make sure that the coupon didn't exceed the max usage (0 mean unlimited). - if (!empty($couponrecord->maxusage) && $couponrecord->maxusage <= $couponrecord->usetimes) { + $olduse = $DB->count_records('enrol_wallet_coupons_usage', ['code' => $coupondata['code']]); + if (!empty($couponrecord->maxusage) && $couponrecord->maxusage <= max($couponrecord->usetimes, $olduse)) { return get_string('coupon_exceedusage', 'enrol_wallet'); } @@ -550,7 +551,7 @@ public static function validate_coupon($coupondata, $area = []) { if (!empty($couponrecord->maxperuser)) { $countperuser = $DB->count_records('enrol_wallet_coupons_usage', [ 'code' => $coupondata['code'], - 'userid' => $USER->id + 'userid' => $USER->id, ]); if ($countperuser >= $couponrecord->maxperuser) { return get_string('coupon_exceedusage', 'enrol_wallet'); @@ -590,13 +591,11 @@ public static function mark_coupon_used($coupon, $userid, $instanceid = 0, $type } else { $couponrecord = $DB->get_record('enrol_wallet_coupons', ['code' => $coupon]); - $usage = $couponrecord->usetimes + 1; - $data = (object)[ - 'id' => $couponrecord->id, - 'lastuse' => time(), - 'usetimes' => $usage, - ]; - $DB->update_record('enrol_wallet_coupons', $data); + $olduse = $DB->count_records('enrol_wallet_coupons_usage', ['code' => $coupon]); + $usage = max($couponrecord->usetimes, $olduse) + 1; + $couponrecord->lastuse = time(); + $couponrecord->usetimes = $usage; + $DB->update_record('enrol_wallet_coupons', $couponrecord); } // Logging the usage in the coupon usage table. @@ -615,7 +614,7 @@ public static function mark_coupon_used($coupon, $userid, $instanceid = 0, $type 'userid' => $userid, 'relateduserid' => $userid, 'objectid' => !empty($id) ? $id : null, - 'other' => $logdata + 'other' => $logdata, ]; if (!empty($instanceid)) { diff --git a/classes/uploadcoupon/processor.php b/classes/uploadcoupon/processor.php index b434058d..ae1ecc61 100644 --- a/classes/uploadcoupon/processor.php +++ b/classes/uploadcoupon/processor.php @@ -42,7 +42,7 @@ class processor { protected $cir; /** @var array CSV columns. */ - protected $columns = array(); + protected $columns = []; /** @var int line number. */ protected $linenb = 0; @@ -106,7 +106,7 @@ public function execute($tracker = null) { 'maxperuser' => get_string('coupons_maxperuser', 'enrol_wallet'), 'validfrom' => get_string('validfrom', 'enrol_wallet'), 'validto' => get_string('validto', 'enrol_wallet'), - 'result' => get_string('upload_result', 'enrol_wallet') + 'result' => get_string('upload_result', 'enrol_wallet'), ]; $tracker->start($reportheadings, true); @@ -334,7 +334,7 @@ public function execute($tracker = null) { get_string('coupons_uploadtotal', 'enrol_wallet', $total), get_string('coupons_uploadcreated', 'enrol_wallet', $created), get_string('coupons_uploadupdated', 'enrol_wallet', $updated), - get_string('coupons_uploaderrors', 'enrol_wallet', $errors) + get_string('coupons_uploaderrors', 'enrol_wallet', $errors), ]; $tracker->finish(); @@ -370,7 +370,7 @@ public function reset() { $this->processstarted = false; $this->linenb = 0; $this->cir->init(); - $this->errors = array(); + $this->errors = []; } /** diff --git a/classes/uploadcoupon/tracker.php b/classes/uploadcoupon/tracker.php index 2846be84..f7f13f7c 100644 --- a/classes/uploadcoupon/tracker.php +++ b/classes/uploadcoupon/tracker.php @@ -55,7 +55,7 @@ class tracker { /** * @var array columns to display. */ - protected $columns = array(); + protected $columns = []; /** * @var bool display visual outcome column. @@ -118,17 +118,17 @@ public function start(array $reportheadings, bool $outcomecol = false) { } else if ($this->outputmode == self::OUTPUT_HTML) { // Print HTML table. $ci = 0; - echo \html_writer::start_tag('table', array('class' => 'generaltable boxaligncenter flexible-wrap')); + echo \html_writer::start_tag('table', ['class' => 'generaltable boxaligncenter flexible-wrap']); echo \html_writer::start_tag('thead'); - echo \html_writer::start_tag('tr', array('class' => 'heading r' . $this->rownb)); + echo \html_writer::start_tag('tr', ['class' => 'heading r' . $this->rownb]); if ($this->outcomecol) { - echo \html_writer::tag('th', '', array('class' => 'c' . $ci++, 'scope' => 'col')); + echo \html_writer::tag('th', '', ['class' => 'c' . $ci++, 'scope' => 'col']); } // Print the headings in array order, and keep track of the columns and order for printing body rows. $ci = 0; foreach ($reportheadings as $hkey => $label) { echo \html_writer::tag('th', $label, - array('class' => 'c' . $ci++, 'scope' => 'col')); + ['class' => 'c' . $ci++, 'scope' => 'col']); } echo \html_writer::end_tag('tr'); echo \html_writer::end_tag('thead'); @@ -170,7 +170,7 @@ public function output(array $rowdata, bool $outcome = false) { $this->rownb++; // Use to mark odd and even rows for visual striping. // Print a row of output. - echo \html_writer::start_tag('tr', array('class' => 'r' . $this->rownb % 2)); + echo \html_writer::start_tag('tr', ['class' => 'r' . $this->rownb % 2]); // Print a visual success indicator column (green tickbox or red x) for the outcome. if ($this->outcomecol) { if ($outcome) { @@ -178,15 +178,15 @@ public function output(array $rowdata, bool $outcome = false) { } else { $outcome = $OUTPUT->pix_icon('i/invalid', ''); } - echo \html_writer::tag('td', $outcome, array('class' => 'c' . $ci++)); + echo \html_writer::tag('td', $outcome, ['class' => 'c' . $ci++]); } // Print a column for each heading. foreach ($this->columns as $key => $value) { if (isset($rowdata[$key])) { - echo \html_writer::tag('td', $rowdata[$key], array('class' => 'c' . $ci++)); + echo \html_writer::tag('td', $rowdata[$key], ['class' => 'c' . $ci++]); } else { - echo \html_writer::tag('td', '', array('class' => 'c' . $ci++)); + echo \html_writer::tag('td', '', ['class' => 'c' . $ci++]); } } echo \html_writer::end_tag('tr'); diff --git a/classes/wordpress.php b/classes/wordpress.php index 73f26d6e..b3644fd6 100644 --- a/classes/wordpress.php +++ b/classes/wordpress.php @@ -108,7 +108,7 @@ public function debit($userid, float $amount, $coursename = '', $charger = '') { 'moodle_user_id' => $userid, 'amount' => $amount, 'course' => $coursename, - 'charger' => $charger + 'charger' => $charger, ]; return $this->request('debit', $data); @@ -129,7 +129,7 @@ public function credit($amount, $userid, $description = '', $charger = '') { 'amount' => $amount, 'moodle_user_id' => $userid, 'description' => $description, - 'charger' => $charger + 'charger' => $charger, ]; $responsedata = $this->request('wallet_topup', $data); diff --git a/cli/sync.php b/cli/sync.php index bb9c9f7a..67ca5994 100644 --- a/cli/sync.php +++ b/cli/sync.php @@ -34,8 +34,8 @@ require_once("$CFG->libdir/clilib.php"); // Now get cli options. -list($options, $unrecognized) = cli_get_params(array('verbose' => false, 'help' => false), - array('v' => 'verbose', 'h' => 'help')); +list($options, $unrecognized) = cli_get_params(['verbose' => false, 'help' => false], + ['v' => 'verbose', 'h' => 'help']); if ($unrecognized) { $unrecognized = implode("\n ", $unrecognized); diff --git a/db/access.php b/db/access.php index b022b3a9..cb1f01ed 100644 --- a/db/access.php +++ b/db/access.php @@ -33,7 +33,7 @@ 'archetypes' => [ 'editingteacher' => CAP_ALLOW, 'manager' => CAP_ALLOW, - ] + ], ], /* Manage user wallet-enrolments. */ @@ -43,7 +43,7 @@ 'archetypes' => [ 'editingteacher' => CAP_ALLOW, 'manager' => CAP_ALLOW, - ] + ], ], /* Voluntarily unenrol self from course - watch out for data loss. */ @@ -52,7 +52,7 @@ 'contextlevel' => CONTEXT_COURSE, 'archetypes' => [ 'student' => CAP_ALLOW, - ] + ], ], /* Unenrol anybody from course (including self) - watch out for data loss. */ @@ -62,7 +62,7 @@ 'archetypes' => [ 'editingteacher' => CAP_ALLOW, 'manager' => CAP_ALLOW, - ] + ], ], // View pages for bulk edit. @@ -72,7 +72,7 @@ 'archetypes' => [ 'editingteacher' => CAP_ALLOW, 'manager' => CAP_ALLOW, - ] + ], ], // View pages for transaction. @@ -81,7 +81,7 @@ 'contextlevel' => CONTEXT_SYSTEM, 'archetypes' => [ 'manager' => CAP_ALLOW, - ] + ], ], // View other users balance. @@ -90,7 +90,7 @@ 'contextlevel' => CONTEXT_SYSTEM, 'archetypes' => [ 'manager' => CAP_ALLOW, - ] + ], ], // Creating coupons. @@ -99,7 +99,7 @@ 'contextlevel' => CONTEXT_SYSTEM, 'archetypes' => [ 'manager' => CAP_ALLOW, - ] + ], ], // Deleting coupons. @@ -108,7 +108,7 @@ 'contextlevel' => CONTEXT_SYSTEM, 'archetypes' => [ 'manager' => CAP_ALLOW, - ] + ], ], // Edit coupons. @@ -117,7 +117,7 @@ 'contextlevel' => CONTEXT_SYSTEM, 'archetypes' => [ 'manager' => CAP_ALLOW, - ] + ], ], // Download coupons. @@ -126,7 +126,7 @@ 'contextlevel' => CONTEXT_SYSTEM, 'archetypes' => [ 'manager' => CAP_ALLOW, - ] + ], ], // View coupons table. @@ -135,7 +135,7 @@ 'contextlevel' => CONTEXT_SYSTEM, 'archetypes' => [ 'manager' => CAP_ALLOW, - ] + ], ], // Performing Transactions. @@ -144,7 +144,7 @@ 'contextlevel' => CONTEXT_SYSTEM, 'archetypes' => [ 'manager' => CAP_ALLOW, - ] + ], ], // Transfer balance to other users. @@ -153,7 +153,7 @@ 'contextlevel' => CONTEXT_SYSTEM, 'archetypes' => [ 'user' => CAP_ALLOW, - ] + ], ], /* Ability to enrol self in courses. */ 'enrol/wallet:enrolself' => [ @@ -161,6 +161,6 @@ 'contextlevel' => CONTEXT_COURSE, 'archetypes' => [ 'user' => CAP_ALLOW, - ] + ], ], ]; diff --git a/db/events.php b/db/events.php index 75bb41f6..ef056fdc 100644 --- a/db/events.php +++ b/db/events.php @@ -32,7 +32,7 @@ [ 'eventname' => '\core\event\course_completed', 'callback' => '\enrol_wallet\observer::wallet_completion_awards', - 'includefile' => '/enrol/wallet/classes/observer.php' + 'includefile' => '/enrol/wallet/classes/observer.php', ], // Release the hold referral gift. [ @@ -44,19 +44,19 @@ [ 'eventname' => '\core\event\user_created', 'callback' => '\enrol_wallet\observer::wallet_gifting_new_user', - 'includefile' => '/enrol/wallet/classes/observer.php' + 'includefile' => '/enrol/wallet/classes/observer.php', ], // Logout user from wordpress. [ 'eventname' => '\core\event\user_loggedout', 'callback' => '\enrol_wallet\observer::logout_from_wordpress', - 'includefile' => '/enrol/wallet/classes/observer.php' + 'includefile' => '/enrol/wallet/classes/observer.php', ], // Observer to apply extra credit to fullfil the discount rule. [ 'eventname' => '\enrol_wallet\event\transactions_triggered', 'callback' => '\enrol_wallet\observer::conditional_discount_charging', - 'includefile' => '/enrol/wallet/classes/observer.php' + 'includefile' => '/enrol/wallet/classes/observer.php', ], ]; diff --git a/db/tasks.php b/db/tasks.php index f7c645d7..7f802bc7 100644 --- a/db/tasks.php +++ b/db/tasks.php @@ -34,7 +34,7 @@ 'day' => '*', 'month' => '*', 'dayofweek' => '*', - 'disabled' => 0 + 'disabled' => 0, ], [ 'classname' => '\enrol_wallet\task\send_expiry_notifications', @@ -44,7 +44,7 @@ 'day' => '*', 'month' => '*', 'dayofweek' => '*', - 'disabled' => 0 - ] + 'disabled' => 0, + ], ]; diff --git a/extendlib.php b/extendlib.php index 8e2065b1..01834f5a 100644 --- a/extendlib.php +++ b/extendlib.php @@ -355,7 +355,7 @@ function enrol_wallet_post_signup_requests($user) { 'referrer' => $refrecord->userid, 'referred' => $user->username, 'amount' => $amount, - 'timecreated' => time() + 'timecreated' => time(), ]; $DB->insert_record('enrol_wallet_hold_gift', $hold); } diff --git a/externallib.php b/externallib.php index 85366324..87680e18 100644 --- a/externallib.php +++ b/externallib.php @@ -44,7 +44,7 @@ class enrol_wallet_external extends external_api { public static function get_instance_info_parameters() { return new external_function_parameters( [ - 'instanceid' => new external_value(PARAM_INT, 'instance id of wallet enrolment plugin.') + 'instanceid' => new external_value(PARAM_INT, 'instance id of wallet enrolment plugin.'), ] ); } @@ -111,7 +111,7 @@ public static function enrol_user_parameters() { return new external_function_parameters( [ 'courseid' => new external_value(PARAM_INT, 'Id of the course'), - 'instanceid' => new external_value(PARAM_INT, 'Instance id of wallet enrolment plugin.', VALUE_DEFAULT, 0) + 'instanceid' => new external_value(PARAM_INT, 'Instance id of wallet enrolment plugin.', VALUE_DEFAULT, 0), ] ); } @@ -132,7 +132,7 @@ public static function enrol_user($courseid, $instanceid = 0) { $params = self::validate_parameters(self::enrol_user_parameters(), [ 'courseid' => $courseid, - 'instanceid' => $instanceid + 'instanceid' => $instanceid, ]); $warnings = []; @@ -201,7 +201,7 @@ public static function enrol_user($courseid, $instanceid = 0) { 'item' => 'instance', 'itemid' => $instance->id, 'warningcode' => '1', - 'message' => $enrolstatus + 'message' => $enrolstatus, ]; } } @@ -221,7 +221,7 @@ public static function enrol_user_returns() { return new external_single_structure( [ 'status' => new external_value(PARAM_BOOL, 'status: true if the user is enrolled, false otherwise'), - 'warnings' => new external_warnings() + 'warnings' => new external_warnings(), ] ); } diff --git a/extra/bulkedit.php b/extra/bulkedit.php index 7ec66134..db5d9cc1 100644 --- a/extra/bulkedit.php +++ b/extra/bulkedit.php @@ -76,12 +76,12 @@ $statusoptions = [ -1 => get_string('nochange', 'enrol'), ENROL_USER_ACTIVE => get_string('participationactive', 'enrol'), - ENROL_USER_SUSPENDED => get_string('participationsuspended', 'enrol') + ENROL_USER_SUSPENDED => get_string('participationsuspended', 'enrol'), ]; -$form->addElement('select', 'status', get_string('alterstatus', 'enrol_manual'), $statusoptions, array('optional' => true)); +$form->addElement('select', 'status', get_string('alterstatus', 'enrol_manual'), $statusoptions, ['optional' => true]); -$form->addElement('date_time_selector', 'timestart', get_string('altertimestart', 'enrol_manual'), array('optional' => true)); -$form->addElement('date_time_selector', 'timeend', get_string('altertimeend', 'enrol_manual'), array('optional' => true)); +$form->addElement('date_time_selector', 'timestart', get_string('altertimestart', 'enrol_manual'), ['optional' => true]); +$form->addElement('date_time_selector', 'timeend', get_string('altertimeend', 'enrol_manual'), ['optional' => true]); $form->addElement('submit' , 'submit', get_string('submit')); $form->disabledIf('submit', 'courses[]', 'noitemselected'); diff --git a/extra/bulkinstances.php b/extra/bulkinstances.php index 66e48715..4e40f566 100644 --- a/extra/bulkinstances.php +++ b/extra/bulkinstances.php @@ -102,14 +102,15 @@ $options = [ '-1' => $nochange, ENROL_INSTANCE_ENABLED => get_string('yes'), - ENROL_INSTANCE_DISABLED => get_string('no')]; + ENROL_INSTANCE_DISABLED => get_string('no'), + ]; $mform->addElement('select', 'status', get_string('status', 'enrol_wallet'), $options, ['optional' => true]); $mform->addHelpButton('status', 'status', 'enrol_wallet'); $options = [ -1 => $nochange, 1 => get_string('yes'), - 0 => get_string('no') + 0 => get_string('no'), ]; $mform->addElement('select', 'customint6', get_string('newenrols', 'enrol_wallet'), $options, ['optional' => true]); $mform->addHelpButton('customint6', 'newenrols', 'enrol_wallet'); @@ -128,7 +129,7 @@ -1 => $nochange, 0 => get_string('no'), 1 => get_string('expirynotifyenroller', 'core_enrol'), - 2 => get_string('expirynotifyall', 'core_enrol') + 2 => get_string('expirynotifyall', 'core_enrol'), ]; $mform->addElement('select', 'expirynotify', get_string('expirynotify', 'core_enrol'), $options); $mform->addHelpButton('expirynotify', 'expirynotify', 'core_enrol'); @@ -161,7 +162,7 @@ $cohorts = [ -1 => $nochange, - 0 => get_string('no') + 0 => get_string('no'), ]; $allcohorts = cohort_get_all_cohorts(); @@ -189,7 +190,7 @@ -1 => $nochange, ENROL_DO_NOT_SEND_EMAIL => get_string('no'), ENROL_SEND_EMAIL_FROM_COURSE_CONTACT => get_string('sendfromcoursecontact', 'enrol'), - ENROL_SEND_EMAIL_FROM_NOREPLY => get_string('sendfromnoreply', 'enrol') + ENROL_SEND_EMAIL_FROM_NOREPLY => get_string('sendfromnoreply', 'enrol'), ]; $mform->addElement('select', 'customint4', get_string('sendcoursewelcomemessage', 'enrol_wallet'), $options); $mform->addHelpButton('customint4', 'sendcoursewelcomemessage', 'enrol_wallet'); diff --git a/extra/charger.php b/extra/charger.php index 2d439956..433cbc87 100644 --- a/extra/charger.php +++ b/extra/charger.php @@ -58,14 +58,9 @@ redirect($returnurl->out(false) . "?" . http_build_query(['errors' => $errors])); } $result = enrol_wallet_handle_charger_form((object)$data); - if ($result) { - $msg = $result; - $type = 'success'; - } else { - $type = 'error'; - } - $returnurl = new moodle_url($return, ['result' => $result]); - redirect($return, $msg, null, $type); + + $returnurl = new moodle_url($return); + redirect($return); exit; } diff --git a/extra/coupontable.php b/extra/coupontable.php index d696f147..1623f363 100644 --- a/extra/coupontable.php +++ b/extra/coupontable.php @@ -298,22 +298,22 @@ $mform->addGroup($maxusagegroup, 'maxusagegroup', get_string('coupons_maxusage', 'enrol_wallet'), null, false); -$mform->addElement('date_time_selector', 'validfrom', get_string('validfrom', 'enrol_wallet'), array('optional' => true)); +$mform->addElement('date_time_selector', 'validfrom', get_string('validfrom', 'enrol_wallet'), ['optional' => true]); if (!empty($validfrom)) { $mform->setDefault('validfrom', $validfrom); } -$mform->addElement('date_time_selector', 'validto', get_string('validto', 'enrol_wallet'), array('optional' => true)); +$mform->addElement('date_time_selector', 'validto', get_string('validto', 'enrol_wallet'), ['optional' => true]); if (!empty($validto)) { $mform->setDefault('validto', $validto); } -$mform->addElement('date_time_selector', 'createdfrom', get_string('createdfrom', 'enrol_wallet'), array('optional' => true)); +$mform->addElement('date_time_selector', 'createdfrom', get_string('createdfrom', 'enrol_wallet'), ['optional' => true]); if (!empty($createdfrom)) { $mform->setDefault('createdfrom', $createdfrom); } -$mform->addElement('date_time_selector', 'createdto', get_string('createdto', 'enrol_wallet'), array('optional' => true)); +$mform->addElement('date_time_selector', 'createdto', get_string('createdto', 'enrol_wallet'), ['optional' => true]); if (!empty($createdto)) { $mform->setDefault('createdto', $createdto); } diff --git a/extra/couponusage.php b/extra/couponusage.php index fff014fe..27151352 100644 --- a/extra/couponusage.php +++ b/extra/couponusage.php @@ -245,7 +245,7 @@ foreach ($fields->get_required_fields([\core_user\fields::PURPOSE_IDENTITY]) as $extrafield) { $user->extrafields[] = (object)[ 'name' => $extrafield, - 'value' => s($record->$extrafield) + 'value' => s($record->$extrafield), ]; } @@ -336,32 +336,32 @@ $mform->addGroup($maxusagegroup, 'maxusagegroup', get_string('coupons_maxusage', 'enrol_wallet'), null, false); -$mform->addElement('date_time_selector', 'validfrom', get_string('validfrom', 'enrol_wallet'), array('optional' => true)); +$mform->addElement('date_time_selector', 'validfrom', get_string('validfrom', 'enrol_wallet'), ['optional' => true]); if (!empty($validfrom)) { $mform->setDefault('validfrom', $validfrom); } -$mform->addElement('date_time_selector', 'validto', get_string('validto', 'enrol_wallet'), array('optional' => true)); +$mform->addElement('date_time_selector', 'validto', get_string('validto', 'enrol_wallet'), ['optional' => true]); if (!empty($validto)) { $mform->setDefault('validto', $validto); } -$mform->addElement('date_time_selector', 'createdfrom', get_string('createdfrom', 'enrol_wallet'), array('optional' => true)); +$mform->addElement('date_time_selector', 'createdfrom', get_string('createdfrom', 'enrol_wallet'), ['optional' => true]); if (!empty($createdfrom)) { $mform->setDefault('createdfrom', $createdfrom); } -$mform->addElement('date_time_selector', 'createdto', get_string('createdto', 'enrol_wallet'), array('optional' => true)); +$mform->addElement('date_time_selector', 'createdto', get_string('createdto', 'enrol_wallet'), ['optional' => true]); if (!empty($createdto)) { $mform->setDefault('createdto', $createdto); } -$mform->addElement('date_time_selector', 'usedfrom', get_string('usedfrom', 'enrol_wallet'), array('optional' => true)); +$mform->addElement('date_time_selector', 'usedfrom', get_string('usedfrom', 'enrol_wallet'), ['optional' => true]); if (!empty($usedfrom)) { $mform->setDefault('usedfrom', $usedfrom); } -$mform->addElement('date_time_selector', 'usedto', get_string('usedto', 'enrol_wallet'), array('optional' => true)); +$mform->addElement('date_time_selector', 'usedto', get_string('usedto', 'enrol_wallet'), ['optional' => true]); if (!empty($usedto)) { $mform->setDefault('usedto', $usedto); } diff --git a/extra/referral.php b/extra/referral.php index f9c0096e..51f579aa 100644 --- a/extra/referral.php +++ b/extra/referral.php @@ -88,7 +88,7 @@ get_string('status'), get_string('referral_amount', 'enrol_wallet'), get_string('referral_timecreated', 'enrol_wallet'), - get_string('referral_timereleased' , 'enrol_wallet') + get_string('referral_timereleased' , 'enrol_wallet'), ]; $table->data[] = $headers; foreach ($refusers as $data) { @@ -100,7 +100,7 @@ $status, format_float($data->amount, 2), userdate($data->timecreated), - !empty($data->timemodified) ? userdate($data->timemodified) : '' + !empty($data->timemodified) ? userdate($data->timemodified) : '', ]; } $output .= html_writer::table($table); diff --git a/extra/transaction.php b/extra/transaction.php index f7f0a8f6..2f9c44ff 100644 --- a/extra/transaction.php +++ b/extra/transaction.php @@ -100,19 +100,19 @@ 'userfields' => implode(',', \core_user\fields::get_identity_fields($systemcontext, true)), 'noselectionstring' => get_string('allusers', 'enrol_wallet'), ]; - $mform->addElement('autocomplete', 'user', get_string('selectusers', 'enrol_manual'), array(), $options); + $mform->addElement('autocomplete', 'user', get_string('selectusers', 'enrol_manual'), [], $options); if (!empty($userid)) { $mform->setDefault('user', $userid); } } // Adding starting and ending dates for transactions. -$mform->addElement('date_time_selector', 'datefrom', get_string('datefrom', 'enrol_wallet'), array('optional' => true)); +$mform->addElement('date_time_selector', 'datefrom', get_string('datefrom', 'enrol_wallet'), ['optional' => true]); if (!empty($datefrom)) { $mform->setDefault('datefrom', $datefrom); } -$mform->addElement('date_time_selector', 'dateto', get_string('dateto', 'enrol_wallet'), array('optional' => true)); +$mform->addElement('date_time_selector', 'dateto', get_string('dateto', 'enrol_wallet'), ['optional' => true]); if (!empty($dateto)) { $mform->setDefault('dateto', $dateto); } diff --git a/lang/ar/enrol_wallet.php b/lang/ar/enrol_wallet.php new file mode 100644 index 00000000..4260cc78 --- /dev/null +++ b/lang/ar/enrol_wallet.php @@ -0,0 +1,559 @@ +. + +/** + * Strings for component 'enrol_wallet', language 'en'. + * + * @package enrol_wallet + * @copyright 2023 Mo Farouk + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + */ + +$string['agreepolicy_intro'] = 'لتنفيذ أي عملية تعبئة للمحفظة، فهذا يعني أنك قرأت ووافقت على سياسة استرداد الأموال اليدوية.
+انقر على الرابط أدناه لقراءة السياسة.
'; +$string['agreepolicy_label'] = 'أوافق على سياسة استرداد الأموال اليدوية.'; +$string['alreadyenroled'] = 'لقد قمت بالتسجيل بالفعل في هذه المقرر، ربما انتهى وقتك أو تم تعليقك
اتصل بالمساعد الفني أو TS لمزيد من المساعدة'; +$string['allusers'] = 'المعاملات لجميع المستخدمين المحددين'; +$string['allowmultiple'] = 'عدد الحالات المسموح بها'; +$string['allowmultiple_help'] = 'حدد عدد المثيلات المسموح بها في المقرر الدراسي الواحد، 0 يعني أنه غير محدود.'; +$string['applycoupon'] = 'تطبيق الكوبون'; +$string['applycoupon_help'] = 'قم بتطبيق رمز الكوبون للحصول على خصم أو الحصول على قيمة ثابتة لشحن محفظتك.
'. +'إذا كانت قيمة الكوبون ثابتة وأكبر من رسوم المقرر، فسيتم تسجيلك.'; +$string['amount'] = 'المبلغ'; +$string['awards'] = 'برنامج الجوائز'; +$string['awards_help'] = 'تمكين أو تعطيل برنامج الجوائز في هذه المقرر'; +$string['awardcreteria'] = 'شرط الحصول على الجائزة'; +$string['awardcreteria_help'] = 'تعمل الجوائز عندما يكمل الطالب المقرر. ما هي نسبة العلامة الكاملة التي يحصل عليها الطالب إذا تجاوزها؟'; +$string['awardvalue'] = 'قيمة الجائزة'; +$string['awardvalue_help'] = 'كم حصل الطالب على كل درجة فوق الشرط؟'; +$string['awardingdesc'] = 'يحصل المستخدم على جائزة بقيمة {$a->amount} في المقرر {$a->courseshortname} للحصول على {$a->usergrade} من {$a->maxgrade}'; +$string['awardsalter'] = 'تغيير الجوائز'; +$string['awardsalter_help'] = 'تغيير حالة برنامج الجوائز'; +$string['awardssite'] = 'تمكين الجوائز'; +$string['awardssite_help'] = 'تمكين قدرة منشئ المقرر على تعيين الجوائز للمقرر.'; +$string['availablebalance'] = 'الرصيد المتاح:'; + +$string['balance_after'] = 'الرصيد بعد'; +$string['balance_before'] = 'الرصيد قبل'; +$string['borrow'] = 'رصيد الاقتراض'; +$string['borrow_desc'] = 'قم بتمكين وتعيين الشرط لجعل المستخدمين الموثوقين قادرين على التسجيل في المقررات دون أن يكون لديهم رصيد كافٍ، ويصبح رصيدهم سلبيًا ويتعين عليهم إعادة شحن المحفظة لدفع ثمنها لاحقًا.'; +$string['borrow_enable'] = 'تمكين الاقتراض'; +$string['borrow_enable_help'] = 'في حالة التمكين، سيتمكن الطلاب المستوفون للشروط من التسجيل في المقررات حتى مع وجود رصيد غير كافي.'; +$string['borrow_trans'] = 'معاملات الاقتراض'; +$string['borrow_trans_help'] = 'عدد المعاملات الائتمانية المطلوبة خلال فترة زمنية معينة، لذا سيكون المستخدم مؤهلاً لاقتراض الرصيد.'; +$string['borrow_period'] = 'فترة المعاملات الخاصة بالاقتراض.'; +$string['borrow_period_help'] = 'الفترة التي يقوم فيها المستخدم بإجراء العدد السابق من المعاملات ليكون مؤهلاً للاقتراض.'; +$string['bulkfolder'] = 'إضافي عن طريق تسجيلات المحفظة'; +$string['bulkeditor'] = 'تحرير جماعي للتسجيلات'; +$string['bulkeditor_head'] = 'تحرير التسجيل المجمع (لجميع المستخدمين في المقررات الدراسية المحددة)'; +$string['bulk_instancestitle'] = 'تحرير مثيلات التسجيل المجمع للمحفظة'; +$string['bulk_instanceshead'] = 'تحرير التسجيل المجمع (لجميع المقررات الدراسية)'; +$string['bulk_instancesno'] = 'لم يتم إنشاء أو تحديث أي مثيلات'; +$string['bulk_instancesyes'] = 'تم تحديث نسخ التسجيل {$a->updated} وتم إنشاء {$a->created}.'; + +$string['cashbackdesc'] = 'تمت الإضافة عن طريق الاسترداد النقدي بسبب التسجيل في {$a}'; +$string['cashbackenable'] = 'تمكين الاسترداد النقدي'; +$string['cashbackenable_desc'] = 'عندما يتم تمكين هذا، سيحصل الطالب على نسبة مئوية من مبلغ الاسترداد النقدي في كل مرة يستخدم فيها المحفظة لشراء مقرر تدريبية.'; +$string['cashbackpercent'] = 'النسبة المئوية لمبلغ الاسترداد النقدي'; +$string['cashbackpercent_help'] = 'النسبة المئوية للمبلغ المسترد للمحفظة من المبلغ المدفوع بواسطة رصيد المحفظة.'; +$string['canntenrol'] = 'التسجيل معطل أو غير نشط'; +$string['canntenrolearly'] = 'لا يمكنك التسجيل بعد؛ يبدأ التسجيل في {$a}.'; +$string['canntenrollate'] = 'لا يمكنك التسجيل بعد الآن، منذ انتهاء التسجيل في {$a}.'; +$string['cannotdeductbalance'] = 'لا يمكن خصم الرصيد بسبب حدوث خطأ. الرجاء المحاولة مرة أخرى وإذا كانت المشكلة لا تزال موجودة، فاتصل بدعم الموقع.'; +$string['categorycoupon'] = 'كوبون الفئة'; +$string['category_options'] = 'الفئة'; +$string['category_options_help'] = 'مثل الكوبونات الثابتة إلا أنها محظورة للاستخدام إلا في الفئة المختارة'; +$string['checkout'] = 'سيتم خصم {$a->credit_cost} {$a->currency} من رصيدك البالغ {$a->user_balance} {$a->currency}.'; +$string['checkout_borrow'] = '{$a->credit_cost} {$a->currency} مطلوب للتسجيل، سيتم خصم رصيدك {$a->user_balance} {$a->currency} واقتراض {$ أ->استعارة}.'; +$string['checkout_discounted'] = '{$a->credit_cost} {$a->currency {$a->after_discount} {$a->currency} سيتم خصمها من رصيدك من {$a->user_balance} {$a->currency}.'; +$string['checkout_borrow_discounted'] = '{$a->credit_cost} {$a->currency {$a->after_discount} {$a->currency} المطلوبة للتسجيل، رصيدك سيتم خصم {$a->user_balance} {$a->currency} واقتراض {$a->borrow}.'; +$string['characters'] = 'الأحرف في الكود.'; +$string['characters_help'] = 'اختر نوع الأحرف في الرموز التي تم إنشاؤها.'; +$string['charger_novalue'] = 'لم يتم إدخال قيمة صالحة.'; +$string['charger_nouser'] = 'لم يتم تحديد مستخدم'; +$string['charger_credit_desc'] = 'الشحن يدوياً بمقدار {$a}'; +$string['charger_debit_desc'] = '(الخصم يدويًا بمقدار {$a})'; +$string['charger_debit_err'] = 'القيمة ({$a->value}) أكبر من رصيد المستخدم ({$a->before}) '; +$string['charger_invalid_operation'] = 'عملية غير صالحة.'; +$string['chargingoptions'] = 'شحن محفظة المستخدم '; +$string['chargingoperation'] = 'العملية'; +$string['chargingvalue'] = 'القيمة'; +$string['charging_value'] = 'قيمة الشحن: '; +$string['clear_filter'] = 'مسح عوامل التصفية'; +$string['cohortnonmemberinfo'] = 'فقط أعضاء المجموعة \' {$a} \' يمكنهم التسجيل.'; +$string['cohortonly'] = 'أعضاء المجموعة النموذجية فقط'; +$string['cohortonly_help'] = 'قد يقتصر التسجيل على أعضاء مجموعة محددة فقط. لاحظ أن تغيير هذا الإعداد ليس له أي تأثير على التسجيلات الحالية.'; +$string['courses_options'] = 'المقررات'; +$string['courses_options_help'] = 'اختر المقررات لتسجيل المستخدم مباشرة باستخدام هذه الكوبونات.'; +$string['conditionaldiscount'] = 'الخصم المشروط'; +$string['conditionaldiscount_link_desc'] = 'إضافة أو تعديل أو حذف قواعد الخصم المشروط'; +$string['conditionaldiscount_apply'] = 'الخصومات المشروطة'; +$string['conditionaldiscount_apply_help'] = 'تمكين الخصم المشروط للموقع بأكمله'; +$string['condition'] = 'شرط'; +$string['conditionaldiscount_condition'] = 'شروط تطبيق الخصم'; +$string[' conditionaldiscount_condition_help'] = ' لن يتم تطبيق الخصومات إلا إذا تم تحصيل رسوم من محفظة المستخدم بأكثر من أو تساوي القيمة المدخلة هنا.'; +$string['conditionaldiscount_desc'] = 'شحن المحفظة بسبب الخصومات المشروطة بمقدار {$a->rest} لشحن المحفظة لأكثر من {$a->condition}'; +$string['conditionaldiscount_percent'] = 'النسبة المئوية لمبلغ الخصم'; +$string['conditionaldiscount_percent_help'] = 'يتم إضافة هذه النسبة إلى المستخدمين. (يطبق فقط لشحن المحفظة)
+ملاحظة مهمة: إذا اختار المستخدم تعبئة المحفظة بمقدار 400 وتم ضبط نسبة الخصم على 15%، فسيدفع المستخدم 340 فقط ثم سيتم إضافة 60 تلقائيًا.'; +$string['conditionaldiscount_percentage'] = 'النسبة المئوية'; +$string['conditionaldiscount_timeto'] = 'متاح حتى'; +$string['conditionaldiscount_timeto_help'] = 'متاح حتى التاريخ المحدد، وبعد ذلك التاريخ لم يعد الشرط قابلاً للتطبيق.'; +$string['conditionaldiscount_timefrom'] = 'متاح بعد'; +$string['conditionaldiscount_timefrom_help'] = 'متاح بعد التاريخ المحدد، وقبله لا يكون الشرط قابلاً للتطبيق .'; +$string['confirmbulkdeleteenrolment'] = 'هل أنت متأكد من رغبتك في حذف تسجيلات المستخدم هذه؟'; +$string['confirmedit'] = 'تأكيد التحرير'; +$string['confirmdeletecoupon'] = 'هل أنت متأكد من رغبتك في حذف الكوبونات ذات المعرف {$a}. هذه العملية لا رجعة فيها.'; +$string['confirm Payment'] = 'تأكيد الدفع بقيمة {$a->value} {$a->currency}. لاحظ أن: الضغط على نعم يعني موافقتك على سياسة استرداد الأموال.
{$a->policy}'; +$string['confirm Payment_discounted'] = 'تأكيد دفع {$a->قبل} {$a->currency {$a->value} {$a->currency}. لاحظ أن: الضغط على نعم يعني موافقتك على سياسة استرداد الأموال.
{$a->policy}'; +$string['coupons'] = 'الكوبونات'; +$string['coupon_applydiscount'] = 'لقد حصلت الآن على خصم بنسبة {$a}%'; +$string['coupon_applyerror'] = 'خطأ في رمز الكوبون غير صالح:
{$a}'; +$string['coupon_applyfilter'] = 'تطبيق الفلتر'; +$string['coupon_applyfixed'] = 'تم تطبيق رمز الكوبون بنجاح بقيمة {$a->value} {$a->currency}.'; +$string['coupon_applynocourse'] = 'حدث خطأ أثناء تطبيق الكوبون، لم يتم العثور على المقرر.'; +$string['coupon_applynohere'] = 'لا يمكن تطبيق كوبون الخصم هنا.'; +$string['coupon_cat_notكافي'] = 'قيمة هذه الكوبون غير كافية لاستخدامها في هذه المقرر.'; +$string['coupon_categoryapplied'] = 'تم تطبيق الكوبون.'; +$string['coupon_categoryfail'] = 'عذرًا، يمكن تطبيق هذه الكوبون فقط في هذه الفئة: {$a}'; +$string['coupons_category_error'] = 'يجب تحديد الفئة'; +$string['coupon_code'] = 'رمز الكوبون'; +$string['coupon_code_error'] = 'الرجاء إدخال الرمز أو تحديد طريقة عشوائية'; +$string['coupon_code_help'] = 'أدخل رمز الكوبون الذي تريده.'; +$string['coupons_courseserror'] = 'يجب تحديد مقرر واحدة على الأقل.'; +$string['coupons_discount_error'] = 'لا يمكن أن تتجاوز قيمة الخصم 100%'; +$string['coupon_edit_title'] = 'تحرير الكوبون'; +$string['coupon_edit_heading'] = 'تحرير الكوبون'; +$string['coupons_valueerror'] = 'القيمة المطلوبة'; +$string['coupon_enrolapplied'] = 'تم تطبيق الكوبون'; +$string['coupon_enrolerror'] = 'عذرًا، يمكن تطبيق هذه الكوبون فقط في هذه المقررات:
{$a}'; +$string['coupon_exceedusage'] = 'هذه الكوبون تتجاوز الحد الأقصى للاستخدام'; +$string['coupon_expired'] = 'انتهت صلاحية هذه الكوبون'; +$string['coupon_generation'] = 'إنشاء كوبونات'; +$string['coupon_generation_title'] = 'إنشاء كوبونات'; +$string['coupon_generation_heading'] = 'أضف كوبونات جديدة'; +$string['coupon_generation_method'] = 'طريقة الإنشاء'; +$string['coupon_generation_method_help'] = 'اختر ما إذا كنت تريد إنشاء كوبون واحدة برمز من اختيارك أو إنشاء عدد من الكوبونات العشوائية'; +$string['coupons_generation_success'] = 'تم إنشاء أكواد الكوبون {$a} بنجاح.'; +$string['coupon_generator_nonumber'] = 'لم يتم تحديد عدد الكوبونات.'; +$string['coupon_generator_error'] = 'حدث خطأ أثناء محاولة إنشاء الكوبونات.'; +$string['coupon_generator_peruser_gt_max'] = 'أقصى استخدام مسموح به لكل مستخدم يجب ألا يتجاوز الحد الأقصى لاستخدام الكوبون.'; +$string['coupon_invalidtype'] = 'نوع الكوبون غير صالح، فقط ثابت، النسبة المئوية، التسجيل والفئة مسموح بها.'; +$string['coupon_invalidid'] = 'سجل الكوبون بهذا المعرف غير موجود أو أنه لا يطابق الرمز.'; +$string['coupons_length'] = 'الطول'; +$string['coupons_length_help'] = 'كم عدد الأحرف في الكوبون الواحدة'; +$string['coupon_novalue'] = 'تعود الكوبون بدون قيمة، من المحتمل أن رمز الكوبون غير موجود'; +$string['coupon_notexist'] = 'هذه الكوبون غير موجودة'; +$string['coupon_notvalidyet'] = 'هذه الكوبون غير صالحة حتى {$a}'; +$string['coupon_nocode'] = 'لا يوجد كود.'; +$string['coupons_number'] = 'عدد الكوبونات'; +$string['coupons_number_help'] = 'الرجاء عدم تعيين عدد كبير حتى لا يتم تحميل قاعدة البيانات بشكل زائد.'; +$string['coupons_maxusage'] = 'الحد الأقصى للاستخدام'; +$string['coupons_maxusage_help'] = 'كم مرة يمكن استخدام الكوبون. (0 يعني غير محدود)'; +$string['coupons_maxperuser'] = 'الحد الأقصى للاستخدام / المستخدم'; +$string['coupons_maxperuser_help'] = 'كم مرة يمكن لمستخدم واحد استخدام هذه الكوبون. (0 يعني الحد الأقصى للاستخدام المسموح به)'; +$string['coupon_perpage'] = 'كوبونات لكل صفحة'; +$string['coupon_resetusetime'] = 'إعادة الضبط المستخدمة'; +$string['coupon_resetusetime_help'] = 'أعد ضبط استخدام الكوبون على الصفر.'; +$string['coupon_t_code'] = 'الرمز'; +$string['coupon_t_value'] = 'القيمة'; +$string['coupon_t_type'] = 'النوع'; +$string['coupon_t_usage'] = 'الاستخدام'; +$string['coupon_t_lastuse'] = 'آخر استخدام'; +$string['coupon_t_timecreated'] = 'وقت الإنشاء'; +$string['coupon_table'] = 'عرض كوبونات المحفظة'; +$string['coupon_type'] = 'نوع الكوبونات'; +$string['coupon_type_help'] = 'اختر نوع الكوبونات المراد إنشاؤها.
+كوبونات ذات قيمة ثابتة: تستخدم في أي مكان وتقوم بتعبئة محفظة المستخدم بقيمتها ، وفي حالة استخدامها في صفحة التسجيل، سيتم تسجيل المستخدم في المقرر إذا كانت كافية.
+كوبونات خصم النسبة المئوية: تستخدم للحصول على نسبة خصم على تكلفة المقرر. +كوبونات الفئة: نفس الكوبونات الثابتة باستثناء أنه لا يمكن استخدامها في أي مكان، فقط لتسجيل المستخدم في الفئة المحددة. +كوبونات المقررات: هذه الكوبونات ليس لها أي قيمة، فهي تستخدم لتسجيل المستخدمين في إحدى المقررات المختارة.'; +$string['coupon_value'] = 'قيمة الكوبون'; +$string['coupon_value_help'] = 'قيمة الكوبون، قيمة ثابتة أو نسبة مخصومة.'; +$string['coupon_usetimes'] = 'أوقات الاستخدام'; +$string['coupon_usage'] = 'سجل استخدام الكوبونات'; +$string['coupon_update_failed'] = 'فشل تحديث الكوبون.'; +$string['coupon_update_success'] = 'تم تحديث الكوبون بنجاح.'; +$string['coupons_uploadtotal'] = '{$a} من إجمالي الكوبونات في الملف.'; +$string['coupons_uploadcreated'] = 'تم إنشاء كوبونات {$a} بنجاح.'; +$string['coupons_uploadupdated'] = 'تم تحديث الكوبون {$a} بنجاح.'; +$string['coupons_uploaderrors'] = 'تقوم الكوبونات {$a} بحساب الأخطاء ولم يتم تحديثها أو إنشاؤها.'; +$string['couponsall'] = 'السماح لجميع الأنواع'; +$string['couponsdeleted'] = 'تم حذف الكوبونات {$a} بنجاح'; +$string['couponsdiscount'] = 'كوبونات الخصم فقط'; +$string['couponsfixed'] = 'كوبونات ذات مبالغ ثابتة فقط'; +$string['couponstype'] = 'السماح بالكوبونات'; +$string['couponstype_help'] = 'اختر إما تعطيل الكوبونات أو السماح بنوع معين أو السماح للجميع.'; +$string['coursesrestriction'] = 'قيد آخر للمقرر'; +$string['coursesrestriction_help'] = 'فقط المستخدمين المسجلين في أكثر من أو يساوي العدد المطلوب من المقررات المحددة يمكنهم شراء هذه المقرر.'; +$string['coursesrestriction_num'] = 'عدد المقررات المطلوبة'; +$string['coursesrestriction_num_help'] = 'اختر الحد الأدنى من المقررات المطلوبة التي يجب على المستخدم تسجيلها لشراء هذه المقرر باستخدام هذا المثال.'; +$string['createdfrom'] = 'تم الإنشاء بعد'; +$string['createdto'] = 'تم الإنشاء من قبل'; +$string['credit_cost'] = 'التكلفة'; +$string['credit_cost_help'] = 'الرسوم التي سيتم خصمها عند التسجيل.'; +$string['csvfile'] = 'ملف CSV'; +$string['csvfile_help'] = 'يتم قبول الملفات ذات الامتداد *.csv فقط'; +$string['currency'] = 'العملة'; +$string['currency_help'] = 'اختر عملة الدفع للمقرر.'; +$string['customcurrency'] = 'العملة المخصصة'; +$string['customcurrency_desc'] = 'إضافة اسم عملة مخصصة لرصيد المحفظة.
لاحظ أن هذا غير صالح مع استخدام بوابة الدفع الفعلية.
إذا تركت فارغة، فستتم إضافة عملات المحفظة إلى قائمة العملات. '; +$string['customcurrencycode'] = 'رمز العملة المخصص'; +$string['customcurrencycode_desc'] = 'إضافة رمز للعملة المخصصة، يشبه الدولار الأمريكي ولكن تأكد من أن هذا الرمز غير موجود بالفعل كرمز عملة متاح في بوابات الدفع المتاحة لأنه لن يتم تجاوزه، ولكن يمكنك تجاوزه عملة محفظة Moodle (MWC).'; +$string['customwelcomemessage'] = 'رسالة ترحيب مخصصة'; +$string['customwelcomemessage_help'] = 'يمكن إضافة رسالة ترحيب مخصصة كنص عادي أو بتنسيق Moodle-auto، بما في ذلك علامات HTML وعلامات متعددة اللغات. + +قد يتم تضمين العناصر النائبة التالية في الرسالة: + +* اسم المقرر {$a->coursename} +* رابط إلى صفحة الملف الشخصي للمستخدم {$a->profileurl} +* البريد الإلكتروني للمستخدم {$a->email} +* الاسم الكامل للمستخدم {$a->fullname}'; + +$string['datefrom'] = 'من'; +$string['dateto'] = 'إلى'; +$string['debitdesc_user'] = 'يتم تحصيل رسوم من المستخدم بمبلغ {$a->amount} بواسطة مستخدم بالمعرف {$a->charger}'; +$string['debitdesc_course'] = 'يتم تحصيل مبلغ {$a->amount} من المستخدم مقابل التسجيل في المقرر {$a->coursename}'; +$string['defaultrole'] = 'تعيين الدور الافتراضي'; +$string['defaultrole_desc'] = 'اختر الدور الذي يجب تعيينه للمستخدمين أثناء التسجيل'; +$string['deleteselectedusers'] = 'حذف تسجيلات المستخدم المحدد'; +$string['digits'] = 'أرقام (أرقام)'; +$string['discountscopouns'] = 'الخصومات والكوبونات'; +$string['discountscopouns_desc'] = 'اختر ما إذا كنت تريد تطبيق نسبة الخصومات على المستخدمين باستخدام حقل ملف تعريف مخصص.
+وأيضًا، تطبيق كوبونات لهذا البرنامج المساعد.'; +$string['discountcoupondisabled'] = 'كوبونات الخصم معطلة في هذا الموقع.'; +$string['editselectedusers'] = 'تحرير تسجيلات المستخدم المحدد'; + +$string['enablerefund'] = 'تمكين استرداد الأموال'; +$string['enablerefund_desc'] = 'إذا لم يتم تحديده، فإن كافة الأرصدة من الآن فصاعداً ستكون غير قابلة للاسترداد، لا تنس أن توضح ذلك للمستخدمين في سياسة الاسترداد'; +$string['endpoint_error'] = 'خطأ في إرجاع نقطة النهاية'; +$string['endpoint_incorrect'] = 'استجابة غير صحيحة'; +$string['enrol_wallet'] = 'التسجيل باستخدام رصيد المحفظة'; +$string['enrol_type'] = 'نوع التسجيل'; +$string['enrolenddate'] = 'تاريخ الانتهاء'; +$string['enrolenddate_help'] = 'إذا تم تمكينه، فيمكن للمستخدمين تسجيل أنفسهم حتى هذا التاريخ فقط.'; +$string['enrolenddaterror'] = 'لا يمكن أن يكون تاريخ انتهاء التسجيل أقدم من تاريخ البدء'; +$string['enrolcupon'] = 'تسجيل الكوبون'; +$string['enrollmentupdated'] = 'تم تحديث التسجيل (التسجيلات)'; +$string['enrolme'] = 'سجلني'; +$string['enrolperiod'] = 'مدة التسجيل'; +$string['enrolperiod_desc'] = 'المدة الافتراضية التي يكون فيها التسجيل صالحاً. إذا تم التعيين على صفر، فستكون مدة التسجيل غير محدودة افتراضيًا.'; +$string['enrolperiod_help'] = 'المدة الزمنية التي يكون فيها التسجيل صالحاً، بدءاً من لحظة قيام المستخدم بالتسجيل بنفسه. في حالة التعطيل، ستكون مدة التسجيل غير محدودة.'; +$string['enrolstartdate'] = 'تاريخ البدء'; +$string['enrolstartdate_help'] = 'إذا تم تمكينه، فيمكن للمستخدمين تسجيل أنفسهم اعتبارًا من هذا التاريخ فصاعدًا فقط.'; +$string['entervalue'] = 'الرجاء إدخال قيمة.'; +$string['equalsto'] = 'يساوي'; +$string['event_transactions'] = 'حدث معاملة المحفظة'; +$string['event_transaction_debit_description'] = 'تم خصم رصيد المحفظة الخاص بالمستخدم بالمعرف {$a->availableuserid} بمقدار {$a->amount} بواسطة المستخدم بالمعرف {$a->userid}
more معلومات: {$a->reason}'; +$string['event_transaction_credit_description'] = 'رصيد المحفظة الخاص بالمستخدم بالمعرف {$a->dependentuserid} الذي تم تحصيله بواسطة {$a->amount} {$a->refundable} بواسطة المستخدم بالمعرف {$a->userid }
مزيد من المعلومات: {$a->reason}'; +$string['event_award'] = 'تم استلام جائزة المحفظة'; +$string['event_award_desc'] = 'المستخدم ذو المعرف {$a->userid} يحصل على جائزة بقيمة {$a->amount} بسبب حصوله على الدرجة {$a->grade}% خلال المعرف {$a- >كورسايد}'; +$string['event_cashback'] = 'استرداد النقود في المحفظة'; +$string['event_cashback_desc'] = 'يحصل المستخدم بالمعرف {$a->userid} على استرداد نقدي في محفظته بمبلغ({$a->amount}) بسبب دفع {$a->original} للتسجيل في المقرر بالمعرف {$a->courseid}'; +$string['event_coupon'] = 'كوبون المحفظة المستخدمة'; +$string['event_coupon_desc'] = 'تم استخدام الكوبون ( {$a->code} ) من قبل المستخدم ذي المعرف {$a->userid}'; +$string['event_newuser_gifted'] = 'إهداء مستخدم جديد'; +$string['event_newuser_gifted_desc'] = 'مستخدم جديد بالمعرف {$a->userid} مُهدى بمبلغ {$a->amount} كرصيد محفظة.'; +$string['expiredaction'] = 'إجراء انتهاء صلاحية التسجيل'; +$string['expiredaction_help'] = 'اختر الإجراء الذي سيتم تنفيذه عند انتهاء صلاحية تسجيل المستخدم. يرجى ملاحظة أنه تتم إزالة بعض بيانات وإعدادات المستخدم من المقرر أثناء إلغاء التسجيل في المقرر.'; +$string['expirymessageenrollersubject'] = 'إشعار انتهاء التسجيل'; +$string['expirymessageenrollerbody'] = 'ستنتهي صلاحية التسجيل في المقرر \' {$a->course} \' خلال {$a->threshold} التالية للمستخدمين التاليين: +
+{$a->المستخدمون} +لتمديد فترة التسجيل، اذهب إلى {$a->extendurl}'; +$string['expirymessageenrolledsubject'] = 'إشعار انتهاء التسجيل'; +$string['expirymessageenrolledbody'] = 'عزيزي {$a->user}، +
+هذا إشعار بأن تسجيلك في المقرر \' {$a->course} \' سينتهي في {$a->timeend}. +
+إذا كنت بحاجة إلى مساعدة، يرجى الاتصال بـ {$a->enroller}.'; +$string['filter_coupons'] = 'كوبونات التصفية'; +$string['filter_transaction'] = 'معاملات التصفية'; +$string['fixedvaluecoupon'] = 'كوبون ذات قيمة ثابتة'; +$string['fixedcoupondisabled'] = 'الكوبونات ذات القيمة الثابتة معطلة في هذا الموقع.'; + +$string['giftdesc'] = 'مستخدم جديد بالمعرف {$a->userid} في {$a->time} حصل على هدية بقيمة {$a->amount} في محفظته.'; +$string['giftvalue'] = 'قيمة هدية المستخدمين الجدد'; +$string['giftvalue_help'] = 'القيمة التي ستتم إضافتها إلى محفظة المستخدمين الجدد.'; +$string['greaterthan'] = 'أكبر من'; +$string['greaterthanorequal'] = 'أكبر من أو يساوي'; + +$string['inefficiency_balance'] = 'ليس لديك رصيد كافٍ في المحفظة للتسجيل. مطلوب {$a->cost_before} جنيه مصري، ورصيدك هو {$a->user_balance} جنيه مصري.'; +$string['inefficiency_balance_discount'] = 'ليس لديك رصيد كافٍ في المحفظة للتسجيل. {$a->cost_before}EGP مطلوب {$a->cost_after} جنيه مصري، ورصيدك هو {$a->user_balance} جنيه مصري.'; +$string['inoughbalance'] = 'عذراً، ليس لديك رصيد كافي لهذه العملية. أنت بحاجة إلى {$a->amount} بينما لديك فقط {$a->balance}'; +$string['inyourwallet'] = 'في محفظتك.'; +$string['invalidpercentcoupon'] = 'القيمة غير صالحة لنسبة الكوبون، لا يمكن أن تتجاوز 100.'; +$string['invalidcoupon_operation'] = 'عملية كوبون غير صالحة، قد يتم تعطيل نوع الكوبون هذا في هذا الموقع أو في حالة التكوين غير الصالح.'; +$string['invalidvalue'] = 'قيمة غير صالحة، الرجاء إدخال قيمة صالحة.'; + +$string['longtimenosee'] = 'إلغاء التسجيل غير النشط بعد'; +$string['longtimenosee_help'] = 'إذا لم يتمكن المستخدمون من الوصول إلى المقرر لفترة طويلة، فسيتم إلغاء تسجيلهم تلقائيًا. تحدد هذه المعلمة هذا الحد الزمني.'; +$string['lowbalancenotification'] = 'رصيد المحفظة منخفض
رصيدك هو {$a}.'; +$string['lowbalancenotify'] = 'إشعار بانخفاض الرصيد.'; +$string['lowbalancenotify_desc'] = 'إذا تم تمكينه وكان رصيد المستخدم أقل من أو يساوي الشرط، فستظهر إشعارات تحذيرية في كل صفحة في الموقع.'; +$string['lowbalancenotice'] = 'تمكين إشعار الرصيد المنخفض'; +$string['lowerletters'] = 'أحرف صغيرة'; + +$string['mainbalance'] = 'الرصيد الرئيسي: '; +$string['maxenrolled'] = 'الحد الأقصى للمستخدمين المسجلين'; +$string['maxenrolled_help'] = 'يحدد الحد الأقصى لعدد المستخدمين الذين يمكنهم التسجيل. 0 يعني عدم وجود حد.'; +$string['maxenrolledreached'] = 'تم الوصول بالفعل إلى الحد الأقصى لعدد المستخدمين المسموح لهم بالتسجيل.'; +$string['messagesubject'] = 'معاملات المحفظة ({$a})'; +$string['messagebody_credit'] = 'لقد تم خصم مبلغ {$a->amount} من محفظتك} +
+رصيدك قبل ذلك كان {$a->before} +
+رصيدك الآن هو: {$a->balance} +
+مزيد من المعلومات: {$a->desc}. في: {$a->time}'; +$string['messagebody_debit'] = 'يُخصم مبلغ {$a->amount} من محفظتك +
+رصيدك قبل ذلك كان {$a->before} +
+رصيدك الآن هو: {$a->balance} +
+مزيد من المعلومات: {$a->desc}. في: {$a->time}'; +$string['messageprovider:expiry_notification'] = 'إشعارات انتهاء صلاحية التسجيل في المحفظة'; +$string['messageprovider:wallet_transaction'] = 'إشعارات معاملات المحفظة'; +$string['mustselectchar'] = 'يجب تحديد نوع حرف واحد على الأقل.'; +$string['mintransfer'] = 'الحد الأدنى لمبلغ التحويل هو {$a}'; +$string['mintransfer_config'] = 'الحد الأدنى المسموح به للنقل'; +$string['mintransfer_config_desc'] = 'الحد الأدنى المسموح به لمبلغ التحويل، لا يمكن للمستخدمين تحويل رصيد لبعضهم البعض أقل من هذا المبلغ.'; +$string['MWC'] = 'عملات المحفظة'; +$string['mywallet'] = 'محفظتي'; + +$string['newenrols'] = 'السماح بالتسجيلات الجديدة'; +$string['newenrols_desc'] = 'السماح للمستخدمين بالتسجيل في المقررات الجديدة بشكل افتراضي.'; +$string['newenrols_help'] = 'يحدد هذا الإعداد ما إذا كان يمكن للمستخدم التسجيل في هذه المقرر أم لا.'; +$string['newusergift'] = 'هدايا للمستخدمين الجدد'; +$string['newusergift_desc'] = 'تطبيق هدية المحفظة للمستخدم الجديد في موقع مودل'; +$string['newusergift_enable'] = 'تمكين هدايا المستخدم الجديد'; +$string['newusergift_enable_help'] = 'في حالة التمكين، سيحصل المستخدمون الجدد على الهدية التي قررتها في محفظتهم.'; +$string['noaccount'] = 'لا يوجد حساب'; +$string['nodiscountstoshow'] = 'لا توجد خصومات للعرض.'; +$string['not_set'] = 'غير محدد'; +$string['notrefund'] = ' غير قابل للاسترداد (إضافي): '; +$string['nonrefundable'] = 'غير قابل للاسترداد'; +$string['nonrefundable_transform_desc'] = "تحويل المعاملة إلى غير قابلة للاسترداد بسبب انتهاء فترة الاسترداد. \n "; +$string['nochange'] = 'لا تغيير'; +$string['nocost'] = 'تكلفة هذا المقرر الدراسي غير صالحة'; +$string['nocoupons'] = 'تعطيل الكوبونات'; +$string['noreferraldata'] = 'لا توجد إحالات سابقة.'; +$string['notequal'] = 'لا يساوي'; +$string['noticecondition'] = 'الحد الأدنى لرصيد الإخطار'; +$string['noticecondition_desc'] = 'إذا كان الرصيد أصغر من أو يساوي هذا الشرط، فسيظهر إشعار للمستخدم.'; + +$string['othercourserestriction'] = 'غير قادر على تسجيل نفسك في هذه المقرر إلا إذا كنت مسجلاً في هذه المقررات {$a}'; + +$string['payaccount'] = 'حساب الدفع'; +$string['payaccount_help'] = 'اختر حساب الدفع الذي ستقبل فيه الدفعات'; +$string['Paymentrequired'] = 'يمكنك الدفع لهذه المقرر مباشرة باستخدام طرق الدفع المتاحة'; +$string['Paymentstopup_desc'] = 'الدفع لتعبئة المحفظة'; +$string['percentdiscountcoupon'] = 'كوبون الخصم المئوية'; +$string['pluginname'] = 'التسجيل في المحفظة'; +$string['pluginname_desc'] = ''; +$string['purchase'] = 'شراء'; +$string['purchasedescription'] = 'التسجيل في المقرر {$a}'; +$string['profile_field_map'] = 'تعيين حقل الملف الشخصي'; +$string['profile_field_map_help'] = 'اختر حقل الملف الشخصي الذي يقوم بتخزين المعلومات حول الخصومات في ملفات تعريف المستخدمين.'; +$string['privacy:metadata'] = 'لا يقوم البرنامج الإضافي للتسجيل في المحفظة بتخزين أي بيانات شخصية.'; + +$string['randomcoupons'] = 'كوبونات عشوائية'; +$string['referral_code'] = 'رمز الإحالة'; +$string['referral_code_signup'] = ''; +$string['referral_code_help'] = 'باستخدام عنوان URL للإحالة، يمكنك إرسال رمز الإحالة هذا بدلاً من ذلك ويقوم المستخدم الجديد بإدخاله في صفحة التسجيل.'; +$string['referral_code_signup_help'] = 'إذا كان هذا فارغاً، أدخل رمز الإحالة لتلقي هدية الإحالة.'; +$string['referral_amount'] = 'مبلغ الإحالة.'; +$string['referral_amount_help'] = 'مبلغ الهدية الذي ستحصل عليه أنت والمستخدم الجديد في المحفظة.'; +$string['referral_amount_desc'] = 'مبلغ الهدية الذي سيحصل عليه كل من المستخدمين المُحالين والمحالين في محفظتهم.'; +$string['referral_max'] = 'الحد الأقصى للإحالات'; +$string['referral_max_desc'] = 'الحد الأقصى للمرات التي يمكن للمستخدم أن يتلقى فيها هدايا الإحالة (0 يعني غير محدود).'; +$string['referral_user'] = 'الإحالات'; +$string['referral_program'] = 'برنامج الإحالات'; +$string['referral_program_desc'] = 'يمكن للمستخدمين الحاليين إحالة مستخدم جديد للانضمام إلى هذا الموقع وسيحصل كلاهما على هدية إحالة.'; +$string['referral_plugins'] = 'تسجيل المكونات الإضافية'; +$string['referral_plugins_desc'] = 'بما أن المستخدمين لا يحصلون على هدية الإحالة حتى يتم تسجيل المستخدم المُحال في مقرر تدريبية للتأكد من أنه مستخدم نشط.
اختر طرق التسجيل المسموح بها لجعل المستخدمين يتلقون هذه الهدية '; +$string['referral_enabled'] = 'تمكين برنامج الإحالة'; +$string['referral_hold'] = 'هدية قيد الحجز'; +$string['referral_done'] = 'تم منح الهدية'; +$string['referral_timecreated'] = 'وقت التسجيل'; +$string['referral_timereleased'] = 'المُهدى عند:'; +$string['referral_exceeded'] = 'رمز الإحالة: {$a} يتجاوز الحد الأقصى للاستخدام .'; +$string['referral_notexist'] = 'الكود: \' {$a} \' غير موجود في قاعدة البيانات.'; +$string['referral_topup'] = 'بسبب إحالة المستخدم: {$a}.'; +$string['referral_gift'] = 'بسبب رمز الإحالة من المستخدم: {$a}'; +$string['referral_holdgift'] = 'لديك هدية ({$a->amount}) بسبب استخدام رمز الإحالة من {$a->name}، قم بشراء مقرر تدريبية للحصول على هديتك.'; +$string['referral_url'] = 'عنوان URL للإحالة'; +$string['referral_url_help'] = 'أرسل عنوان url هذا إلى صديقك للتسجيل في هذا الموقع والحصول على هدية إحالة بالمبلغ التالي في محفظتك.'; +$string['referral_remain'] = 'الإحالات المتبقية.'; +$string['referral_remain_help'] = 'الأوقات المتبقية المتاحة لتلقي هدية الإحالة.'; +$string['referral_past'] = 'الإحالات السابقة'; +$string['referral_data'] = 'بيانات الإحالة'; +$string['refundpolicy'] = 'سياسة الاسترداد اليدوية'; +$string['refundpolicy_help'] = 'حدد سياسة استرداد مخصصة للمستخدمين ليكونوا على دراية بحالة كيفية استرداد أموالهم أو عدم استردادها قبل تعبئة محفظتهم. سيتم عرض هذه السياسة للمستخدمين بأي شكل من الأشكال لإعادة شحن محفظتهم، أو عرض رصيدهم. '; +$string['refundpolicy_default'] = '
سياسة استرداد الأموال
+يرجى ملاحظة ما يلي:
+لا يمكن استرداد المبلغ المدفوع لتعبئة محفظتك في الحالات التالية:
+1- إذا كان هذا المبلغ بسبب هدية أو مكافأة أو استرداد نقدي للمستخدم الجديد.
+2- إذا انتهت فترة سماح الاسترداد (14 يومًا).
+3- أي مبلغ تم استخدامه بالفعل في التسجيل غير قابل للاسترداد.
+عند شحن محفظتك بأي طريقة يعني موافقتك على هذه السياسة.'; +$string['refundperiod'] = 'فترة السماح لاسترداد الأموال'; +$string['refundperiod_desc'] = 'الوقت الذي لا يستطيع المستخدمون بعده استرداد ما دفعوه لتعبئة محفظتهم. 0 يعني استرداد الأموال في أي وقت.'; +$string['refunduponunenrol_desc'] = 'تم استرداد المبلغ بمبلغ {$a->credit} بعد خصم رسوم إلغاء التسجيل البالغة {$a->fee} في المقرر: {$a->coursename}.'; +$string['receiver'] = 'Receiver'; +$string['role'] = 'الدور المعين الافتراضي'; + +$string['sendcoursewelcomemessage'] = 'أرسل رسالة ترحيب للمقرر'; +$string['sendcoursewelcomemessage_help'] = 'عندما يقوم المستخدم بالتسجيل في المقرر، قد يتم إرسال رسالة ترحيب عبر البريد الإلكتروني إليه. إذا تم إرساله من جهة اتصال المقرر الدراسي (المدرس بشكل افتراضي)، وكان لدى أكثر من مستخدم هذا الدور، فسيتم إرسال البريد الإلكتروني من المستخدم الأول الذي تم تعيينه للدور.'; +$string['sender'] = 'Sender'; +$string['sendexpirynotificationstask'] = "مهمة التسجيل في المحفظة ترسل إشعارات انتهاء الصلاحية"; +$string['sendpaybutton'] = 'الدفع المباشر'; +$string['showprice'] = 'أظهر السعر على أيقونة التسجيل'; +$string['showprice_desc'] = 'في حالة التحديد، سيتم عرض سعر المقرر فوق أيقونة التسجيل في بطاقة المقرر.'; +$string['singlecoupon'] = 'كوبون واحدة'; +$string['status'] = 'السماح بالتسجيلات الموجودة'; +$string['status_desc'] = 'تمكين طريقة التسجيل في المحفظة في المقررات الدراسية الجديدة.'; +$string['status_help'] = 'إذا تم تمكينه مع تعطيل \' السماح بالتسجيلات الجديدة \' ، فلن يتمكن سوى المستخدمين الذين قاموا بالتسجيل مسبقًا من الوصول إلى المقرر. إذا تم تعطيلها، فسيتم تعطيل طريقة التسجيل هذه بشكل فعال، حيث يتم تعليق جميع التسجيلات الحالية ولا يمكن للمستخدمين الجدد التسجيل.'; +$string['smallerthan'] = 'أصغر من'; +$string['smallerthanorequal'] = 'أصغر من أو يساوي'; +$string['sourcemoodle'] = 'محفظة موودل الداخلية'; +$string['sourcewordpress'] = 'محفظة تيرا خارجية (WooWallet)'; +$string['submit_coupongenerator'] = 'إنشاء'; +$string['syncenrolmentstask'] = 'مهمة مزامنة التسجيل في المحفظة'; + +$string['topup'] = 'اشحن رصيدك'; +$string['topupafterdiscount'] = 'الدفع الفعلي'; +$string['topupafterdiscount_help'] = 'المبلغ بعد الخصم.'; +$string['topupvalue'] = 'قيمة الشحن'; +$string['topupvalue_help'] = 'قيمة تعبئة محفظتك باستخدام طرق الدفع'; +$string['topupcoupon_desc'] = 'بواسطة رمز الكوبون {$a}'; +$string['topuppayment_desc'] = 'تعبئة المحفظة عن طريق دفع {$a} باستخدام بوابة الدفع.'; +$string['transactions'] = 'معاملات المحفظة'; +$string['transaction_type'] = 'نوع المعاملة'; +$string['transaction_perpage'] = 'المعاملات لكل صفحة'; +$string['transfer'] = 'تحويل الرصيد إلى مستخدم آخر'; +$string['transfer_desc'] = 'تمكين أو تعطيل قدرة المستخدمين على تحويل الرصيد إلى مستخدمين آخرين وتحديد رسوم التحويل لكل عملية.'; +$string['transfer_enabled'] = 'النقل إلى مستخدم آخر'; +$string['transfer_enabled_desc'] = 'تمكين أو تعطيل قدرة المستخدمين على تحويل الرصيد إلى مستخدمين آخرين عبر البريد الإلكتروني.'; +$string['transfer_notenabled'] = 'النقل من مستخدم إلى مستخدم \' غير ممكن في هذا الموقع.'; +$string['transferfee_desc'] = 'لاحظ أنه سيتم خصم {$a->fee}% من {$a->from}.'; +$string['transferfee_from'] = 'خصم الرسوم من:'; +$string['transferfee_from_desc'] = 'اختر كيفية خصم الرسوم.
+من المرسل: يعني تحويل المبلغ بالكامل وخصم رصيد إضافي من المرسل.
+من المرسل إليه: يعني أن المبلغ المحول للمستلم أقل من المبلغ المرسل بالرسوم.'; +$string['transferop_desc'] = 'تحويل مبلغ صافي قدره {$a->amount} مع رسوم تحويل {$a->fee} إلى {$a->receiver}'; +$string['transfercent'] = 'رسوم التحويل %'; +$string['transfercent_desc'] = 'لتحويل مبلغ ما إلى مستخدم آخر، سيتم خصم نسبة مئوية من المرسل افتراضيًا. اضبطه على 0 حتى لا يتم خصم أي رسوم.'; +$string['transferpage'] = 'تحويل الرصيد'; +$string['turn_not_refundable_task'] = 'تحويل الرصيد إلى غير قابل للاسترداد.'; + +$string['unenrol'] = 'إلغاء تسجيل المستخدم'; +$string['unenrollimitafter'] = 'لا يمكن إلغاء التسجيل الذاتي بعد:'; +$string['unenrollimitafter_desc'] = 'لا يمكن للمستخدمين تسجيل أنفسهم بعد هذه الفترة من تاريخ بدء التسجيل. 0 يعني غير محدود.'; +$string['unenrollimitbefor'] = 'لا يمكن إلغاء التسجيل الذاتي قبل:'; +$string['unenrollimitbefor_desc'] = 'لا يمكن للمستخدمين إلغاء التسجيل بأنفسهم قبل هذه الفترة من تاريخ انتهاء التسجيل. 0 يعني عدم وجود حد.'; +$string['unenrolrefund'] = 'استرداد المبلغ عند إلغاء التسجيل؟'; +$string['unenrolrefund_desc'] = 'في حالة التمكين، سيتم استرداد أموال المستخدمين إذا قاموا بإلغاء تسجيلهم في المقرر.'; +$string['unenrolrefundperiod'] = 'استرداد الأموال عند فترة سماح إلغاء التسجيل'; +$string['unenrolrefundperiod_desc'] = 'إذا قام المستخدم بإلغاء تسجيله خلال هذه الفترة من تاريخ بدء التسجيل، فسيتم استرداد أمواله.'; +$string['unenrolrefundfee'] = 'رسوم النسبة المئوية للاسترداد'; +$string['unenrolrefundfee_desc'] = 'اختر النسبة المئوية للمبلغ الذي لن يتم استرداده بعد إلغاء التسجيل كرسوم.'; +$string['unenrolrefundpolicy'] = 'سياسة استرداد الإلغاء'; +$string['unenrolrefundpolicy_help'] = 'في حالة تمكين استرداد الأموال عند إلغاء التسجيل، ستكون هذه السياسة مرئية للمستخدمين قبل تسجيل أنفسهم في المقررات باستخدام تسجيل المحفظة.
+سيتم استبدال {fee} في السياسة بنسبة الرسوم.
+سيتم استبدال {period} بفترة السماح بالأيام.'; +$string['unenrolrefundpolicy_default'] = '

شروط استرداد الأموال عند إلغاء التسجيل:

+

+إذا قمت بإلغاء تسجيلك في المقرر خلال {period} يوم من تاريخ البدء، فسيتم رد المبلغ الذي دفعته إليك بعد خصم {fee}% من المبلغ المدفوع. +سيعود هذا المبلغ إلى محفظتك ويمكنك استخدامه للتسجيل في مقررات أخرى ولكن لا يمكن استرداده يدويًا.
+بالضغط على الشراء يعني أنك وافقت على هذه الشروط. +

'; +$string['unenrolrefund_head'] = 'استرداد أموال المستخدمين عند إلغاء التسجيل.'; +$string['unenrolrefund_head_desc'] = 'أعد الرسوم المدفوعة للمقرر بعد إلغاء التسجيل فيها.'; +$string['unenrolselfconfirm'] = 'هل تريد فعلاً إلغاء تسجيلك من المقرر "{$a}"؟'; +$string['unenrolselfenabled'] = 'تمكين إلغاء التسجيل الذاتي'; +$string['unenrolselfenabled_desc'] = 'في حالة التمكين، يُسمح للمستخدمين بإلغاء تسجيل أنفسهم من المقرر الدراسي.'; +$string['unenrolself_notallowed'] = 'لم تتمكن من إلغاء تسجيلك في هذه المقرر.'; +$string['unenroluser'] = 'هل تريد حقاً إلغاء تسجيل "{$a->user}" من المقرر الدراسي "{$a->course}؟'; +$string['unenrolusers'] = 'إلغاء تسجيل المستخدمين'; +$string['upperletters'] = 'الحالة العلوية'; +$string['upload_coupons'] = 'كوبونات التحميل'; +$string['upload_coupons_help'] = 'قم بتحميل الكوبونات في ملف CSV لإضافة أو تحرير كوبونات المحفظة بشكل مجمّع، يجب أن يحتوي ملف CSV على عمودين أساسيين:
+\' code \' : رمز الكوبون المراد إضافتها أو تحديثها.
+\' value \' : قيمة الكوبون ولا يجوز تركها 0 إلا إذا كان نوعها (تسجيل).
+والأعمدة الاختيارية:
+\' type \' : نوع الكوبون وأربع قيم مسموحة فقط (ثابتة أو نسبة مئوية أو فئة أو تسجيل).
+\' courses \' : يسري فقط عندما يكون النوع (تسجيل) ويجب أن يحتوي على الأسماء المختصرة للمقررات المطلوبة مفصولة بـ / .
+\' category \' : معرف الفئة التي تتوفر فيها الكوبون للاستخدام.
+\' maxusage \' : الحد الأقصى لاستخدام رمز الكوبون.
+\' validfrom \' : الطابع الزمني للتاريخ الذي تصبح فيه الكوبون متاحة للاستخدام.
+\' validto \' : الطابع الزمني للتاريخ الذي لن تصبح الكوبون متاحة بعده.
+\' maxperuser \' : الحد الأقصى للوقت الذي يمكن لمستخدم واحد أن يستخدم فيه كوبون.
+\' id \' : معرف الكوبون في حالة تحديثها.'; +$string['upload_result'] = 'النتيجة'; +$string['usernotfound'] = 'لم يتم العثور على مستخدم لديه هذا البريد الإلكتروني {$a}'; +$string['usedfrom'] = 'مستخدم من'; +$string['usedto'] = 'معتاد على'; + +$string['value'] = 'المبلغ لكل معاملة'; + +$string['wallet:bulkedit'] = 'تحرير التسجيلات بشكل مجمّع في كافة المقررات الدراسية'; +$string['wallet:config'] = 'تكوين حالات التسجيل في المحفظة'; +$string['wallet:creditdebit'] = 'الائتمان والخصم للمستخدمين الآخرين'; +$string['wallet:createcoupon'] = 'إنشاء كوبونات المحفظة'; +$string['wallet:deletecoupon'] = 'حذف كوبون المحفظة'; +$string['wallet:downloadcoupon'] = 'تنزيل كوبونات المحفظة'; +$string['wallet:editcoupon'] = 'تحرير الكوبونات'; +$string['wallet:enrolself'] = 'قم بشراء مقرر تدريبية من خلال مثيل محفظة التسجيل' . +$string['wallet:manage'] = 'إدارة المستخدمين المسجلين'; +$string['wallet:unenrol'] = 'إلغاء تسجيل المستخدمين من المقرر الدراسي'; +$string['wallet:unenrolself'] = 'إلغاء التسجيل الذاتي من المقرر الدراسي'; +$string['wallet:transaction'] = 'عرض جدول المعاملات'; +$string['wallet:transfer'] = 'نقل رصيد المحفظة إلى مستخدم آخر'; +$string['wallet:viewcoupon'] = 'عرض جدول كوبونات المحفظة'; +$string['wallet:viewotherbalance'] = 'عرض رصيد المحفظة للآخرين'; +$string['walletcashback'] = 'استرداد النقود مقابل استخدام المحفظة'; +$string['walletcashback_desc'] = 'تمكين برنامج الاسترداد النقدي عبر الموقع بأكمله'; +$string['walletcredit'] = 'رصيد المحفظة'; +$string['walletbulk'] = 'تحرير مجمع لمثيلات تسجيل المحفظة'; +$string['walletsource'] = 'مصدر المحفظة'; +$string['walletsource_help'] = 'اختر إما ربط المحفظة بمحفظة Tera الخارجية للتجارة الإلكترونية، أو مجرد استخدام المحفظة الداخلية في مودل'; +$string['welcometocourse'] = 'مرحبًا بك في {$a}'; +$string['welcometocoursetext'] = 'مرحبًا بك في {$a->coursename}! + +إذا لم تكن قد قمت بذلك بالفعل، فيجب عليك تعديل صفحة ملفك الشخصي حتى نتمكن من معرفة المزيد عنك: + +{$a->profileurl}'; +$string['wordpressurl'] = 'عنوان URL الخاص بـWordpress'; +$string['wordpressurl_desc'] = 'عنوان url الخاص بـ WordPress مع إضافة woo-wallet (محفظة tera) عليه'; +$string['wordpressloggins'] = 'تسجيل دخول/خروج المستخدم من ووردبريس'; +$string['wordpressloggins_desc'] = 'إذا كان المستخدمون الممكّنون قد قاموا بتسجيل الدخول والخروج من موقع ووردبريس عندما قاموا بتسجيل الدخول أو الخروج من مودل. (لاحظ أن هذه طريقة واحدة فقط)'; +$string['wordpress_secretkey'] = 'المفتاح السري'; +$string['wordpress_secretkey_help'] = 'يجب على المشرف إضافة أي قيمة هنا ونفس القيمة في إعداد moo-wallet في موقع Wordpress.'; +$string['wrongemailformat'] = 'تنسيق بريد إلكتروني خاطئ.'; +$string['validfrom'] = 'صالح من'; +$string['validto'] = 'صالح لـ'; + +$string['youhavebalance'] = 'لديك رصيد:'; + +$string['repurchase'] = 'إعادة شراء'; +$string['repurchase_desc'] = 'إعدادات لإعادة شراء المقررات. إن تم تفعيلها يمكن للمستخدمين إعادة شراء المقررات بعد إنتهاء وقت الدخول.'; +$string['repurchase_firstdis'] = 'تخفيض إعادة الشراء لأول مرة'; +$string['repurchase_firstdis_desc'] = 'إن تم تحديدها سيتم تطبيق تخفيض لإعادة شراء المحاضرة لأول مرةز يجم أن تكون القيمة من 0 إلى 100.'; +$string['repurchase_seconddis'] = 'تخفيض إعادة الشراء لثاني مرة'; +$string['repurchase_seconddis_desc'] = 'تطبيق تخفيض للمستخدم لإعادة الشراء لثاني مرة مما يعني انها ثالث مرة للمستخدم شراء المقرر ويجب أن تكون من 0 إلى 100 وأن تكون أزيد من تخفيض أول مرة'; +$string['selectuser'] = 'برجاء إختيار مستخدم.'; diff --git a/lang/en/enrol_wallet.php b/lang/en/enrol_wallet.php index a4f3a293..e6098643 100644 --- a/lang/en/enrol_wallet.php +++ b/lang/en/enrol_wallet.php @@ -291,8 +291,8 @@ $string['greaterthan'] = 'Greater than'; $string['greaterthanorequal'] = 'Greater than or equal'; -$string['insufficient_balance'] = 'You have insufficient wallet balance to enroll. {$a->cost_before} EGP are required, your balance is {$a->user_balance} EGP.'; -$string['insufficient_balance_discount'] = 'You have insufficient wallet balance to enroll. {$a->cost_before}EGP {$a->cost_after} EGP are required, your balance is {$a->user_balance} EGP.'; +$string['insufficient_balance'] = 'You have insufficient wallet balance to enroll. {$a->cost_before} {$a->currency} are required, your balance is {$a->user_balance} {$a->currency}.'; +$string['insufficient_balance_discount'] = 'You have insufficient wallet balance to enroll. {$a->cost_before} {$a->currency} {$a->cost_after} {$a->currency} are required, your balance is {$a->user_balance} {$a->currency}.'; $string['insufficientbalance'] = 'Sorry, you have insufficient balance for this operation. You need {$a->amount} while you have only {$a->balance}'; $string['inyourwallet'] = 'in your wallet.'; $string['invalidpercentcoupon'] = 'Invalid value for percentage coupon, cannot exceed 100.'; @@ -549,3 +549,11 @@ $string['validto'] = 'Valid to'; $string['youhavebalance'] = 'You have balance:'; + +$string['repurchase'] = 'Repurchase'; +$string['repurchase_desc'] = 'Settings for repurchase the courses. If enabled, the users can repurchase the lectures again after the enrol date end.'; +$string['repurchase_firstdis'] = 'First Repurchse Discount'; +$string['repurchase_firstdis_desc'] = 'If specified, the users will get discount by this percentage value (0 - 100) for the second time they purchase the course.'; +$string['repurchase_seconddis'] = 'Second Repurchase Discount'; +$string['repurchase_seconddis_desc'] = 'For the third time the users purchase (second repurchase) the course, they will get discounted by this value. (should be between 0 - 100)'; +$string['selectuser'] = 'Please select a user.'; diff --git a/lib.php b/lib.php index 3692bb15..0d5e3fc2 100644 --- a/lib.php +++ b/lib.php @@ -88,6 +88,17 @@ class enrol_wallet_plugin extends enrol_plugin { */ protected $costafter; + /** + * Summary of __construct + * @param mixed $instance + */ + public function __construct($instance = null) { + if (!empty($instance)) { + global $USER; + $this->costafter = $this->get_cost_after_discount($USER->id, $instance); + } + $this->load_config(); + } /** * Returns optional enrolment information icons. * @@ -103,7 +114,7 @@ class enrol_wallet_plugin extends enrol_plugin { public function get_info_icons(array $instances) { global $PAGE; $att = []; - if (!empty(get_config('enrol_wallet', 'showprice'))) { + if (!empty($this->config->showprice)) { global $USER; $cost = PHP_INT_MAX; foreach ($instances as $instance) { @@ -138,7 +149,6 @@ public function get_info_icons(array $instances) { var imageElement = document.getElementById('$id'); var x = setInterval(function() { var exist = document.getElementById('$idp'); - console.log(exist); if (exist === null) { // Insert the new title element before the image element imageElement.parentNode.insertBefore(titleElement, imageElement); @@ -160,7 +170,7 @@ public function get_info_icons(array $instances) { * @return string */ public function get_instance_name($instance) { - global $DB; + global $DB, $USER; if (empty($instance->name)) { @@ -169,9 +179,10 @@ public function get_instance_name($instance) { } else { $role = ''; } - + $cost = $this->get_cost_after_discount($USER->id, $instance); + $currency = $instance->currency; $enrol = $this->get_name(); - return get_string('pluginname', 'enrol_' . $enrol) . $role; + return get_string('pluginname', 'enrol_' . $enrol) . $role . '-' . $cost . ' ' . $currency; } else { return format_string($instance->name); } @@ -406,8 +417,18 @@ public function enrol_self(stdClass $instance, \stdClass $user = null, $charge = $timestart = time(); $timeend = ($instance->enrolperiod) ? $timestart + $instance->enrolperiod : 0; + + // The times the user get deducted but not enrolled, so we try the while loop to make sure that the user enrolled. try { - $this->enrol_user($instance, $user->id, $instance->roleid, $timestart, $timeend); + $conditions = [ + 'userid' => $user->id, + 'enrolid' => $instance->id, + 'timestart' => $timestart, + 'timeend' => $timeend, + 'status' => ENROL_USER_ACTIVE]; + while (!$DB->record_exists('user_enrolments', $conditions)) { + $this->enrol_user($instance, $user->id, $instance->roleid, $timestart, $timeend, null, true); + } } catch (\moodle_exception $e) { // Rollback the transaction in case of error. if ($charge) { @@ -620,6 +641,7 @@ public function enrol_page_hook(stdClass $instance) { 'cost_before' => $costbefore, 'cost_after' => $costafter, 'user_balance' => $balance, + 'currency' => $instance->currency, ]; if ($enrolstatus == self::INSUFFICIENT_BALANCE) { $data->info = get_string('insufficient_balance', 'enrol_wallet', $a); @@ -693,6 +715,7 @@ public function enrol_page_hook(stdClass $instance) { */ public function can_self_enrol(stdClass $instance, $checkuserenrolment = true) { global $CFG, $DB, $OUTPUT, $USER; + $repurchase = get_config('enrol_wallet', 'repurchase'); if (isguestuser()) { // Can not enrol guest. @@ -703,7 +726,7 @@ public function can_self_enrol(stdClass $instance, $checkuserenrolment = true) { if (!has_capability('enrol/wallet:enrolself', context_course::instance($instance->courseid))) { return get_string('canntenrol', 'enrol_wallet'); } - // Check if user has the capability to enrol in this context. + // Check if user is a parent only if auth wallet exists. if (file_exists($CFG->dirroot . '/auth/parent/lib.php')) { require_once($CFG->dirroot . '/auth/parent/lib.php'); if (auth_parent_is_parent($USER)) { @@ -712,8 +735,11 @@ public function can_self_enrol(stdClass $instance, $checkuserenrolment = true) { } if ($checkuserenrolment) { // Check if user is already enroled. - if ($DB->record_exists('user_enrolments', ['userid' => $USER->id, 'enrolid' => $instance->id])) { - return get_string('alreadyenroled', 'enrol_wallet'); + if ($ue = $DB->get_record('user_enrolments', ['userid' => $USER->id, 'enrolid' => $instance->id])) { + // Check if repurchase enabled, the enrolment already endded and the user isn't suspended. + if (!$repurchase || (!empty($ue->timeend) && $ue->timeend < time()) || $ue->status == ENROL_USER_SUSPENDED) { + return get_string('alreadyenroled', 'enrol_wallet'); + } } } @@ -778,7 +804,7 @@ public function can_self_enrol(stdClass $instance, $checkuserenrolment = true) { } // Insufficient balance. - $costafter = self::get_cost_after_discount($USER->id, $instance); + $costafter = self::get_cost_after_discount($USER->id, $instance, null); // Check if the discount gives acceptable cost. if (!is_numeric($costafter) || $costafter < 0) { return get_string('nocost', 'enrol_wallet'); @@ -1092,8 +1118,10 @@ public function can_hide_show_instance($instance) { * @return array */ protected function get_status_options() { - $options = [ENROL_INSTANCE_ENABLED => get_string('yes'), - ENROL_INSTANCE_DISABLED => get_string('no')]; + $options = [ + ENROL_INSTANCE_ENABLED => get_string('yes'), + ENROL_INSTANCE_DISABLED => get_string('no'), + ]; return $options; } @@ -1113,9 +1141,11 @@ protected function get_newenrols_options() { * @return array */ protected function get_expirynotify_options() { - $options = [0 => get_string('no'), + $options = [ + 0 => get_string('no'), 1 => get_string('expirynotifyenroller', 'core_enrol'), - 2 => get_string('expirynotifyall', 'core_enrol')]; + 2 => get_string('expirynotifyall', 'core_enrol'), + ]; return $options; } @@ -1125,7 +1155,8 @@ protected function get_expirynotify_options() { * @return array */ public function get_longtimenosee_options() { - $options = [0 => get_string('never'), + $options = [ + 0 => get_string('never'), 1800 * DAYSECS => get_string('numdays', '', 1800), 1000 * DAYSECS => get_string('numdays', '', 1000), 365 * DAYSECS => get_string('numdays', '', 365), @@ -1137,7 +1168,8 @@ public function get_longtimenosee_options() { 30 * DAYSECS => get_string('numdays', '', 30), 21 * DAYSECS => get_string('numdays', '', 21), 14 * DAYSECS => get_string('numdays', '', 14), - 7 * DAYSECS => get_string('numdays', '', 7)]; + 7 * DAYSECS => get_string('numdays', '', 7), + ]; return $options; } @@ -1195,7 +1227,7 @@ public function course_restriction_edit($coursesoptions, \MoodleQuickForm $mform $params = [ 'id' => 'wallet_courserestriction', - 'onChange' => 'restrictByCourse()' + 'onChange' => 'restrictByCourse()', ]; $restrictionlable = get_string('coursesrestriction', 'enrol_wallet'); $select = $mform->addElement('select', 'courserestriction', $restrictionlable, $coursesoptions, $params); @@ -1220,7 +1252,7 @@ protected function get_send_welcome_email_option() { $options = [ ENROL_DO_NOT_SEND_EMAIL => get_string('no'), ENROL_SEND_EMAIL_FROM_COURSE_CONTACT => get_string('sendfromcoursecontact', 'enrol'), - ENROL_SEND_EMAIL_FROM_NOREPLY => get_string('sendfromnoreply', 'enrol') + ENROL_SEND_EMAIL_FROM_NOREPLY => get_string('sendfromnoreply', 'enrol'), ]; return $options; @@ -1493,7 +1525,7 @@ public function course_edit_form($instance, \MoodleQuickForm $mform, $data, $con $params = ['id' => $courseid, 'wallet' => true, 'sesskey' => sesskey()] + (array)$data; $url = (new \moodle_url('/course/edit.php', $params))->out(false); $mform->addElement('button', 'wallet', 'insert wallet enrolment instance', [ - 'onclick' => "createWallet('$url')" + 'onclick' => "createWallet('$url')", ]); $code = << $validstatus, 'enrolperiod' => PARAM_INT, 'expirynotify' => $validexpirynotify, - 'roleid' => $validroles + 'roleid' => $validroles, ]; if (count($cohorts) > 0) { @@ -1905,6 +1937,20 @@ public static function check_discount_coupon() { */ public static function get_cost_after_discount($userid, $instance, $coupon = null) { global $DB; + $cost = $instance->cost; + if ($ue = $DB->get_record('user_enrolments', ['enrolid' => $instance->id, 'userid' => $userid])) { + if (!empty($ue->timeend) && get_config('enrol_wallet', 'repurchase')) { + if ($first = get_config('enrol_wallet', 'repurchase_firstdis')) { + $cost = (100 - $first) * $instance->cost / 100; + $second = get_config('enrol_wallet', 'repurchase_seconddis'); + $timepassed = $ue->timemodified > $ue->timecreated + $ue->timeend - $ue->timestart; + if ($second && $ue->modifierid == $userid && $timepassed) { + $cost = (100 - $second) * $instance->cost / 100; + } + } + } + } + $couponsetting = get_config('enrol_wallet', 'coupons'); $percentav = $couponsetting == self::WALLET_COUPONSALL || $couponsetting == self::WALLET_COUPONSDISCOUNT; // Check if there is a discount coupon first. @@ -1912,7 +1958,7 @@ public static function get_cost_after_discount($userid, $instance, $coupon = nul $coupon = self::check_discount_coupon(); } - $costaftercoupon = $instance->cost; + $costaftercoupon = $cost; if (!empty($coupon) && $percentav) { // Save coupon in session. @@ -1994,7 +2040,7 @@ public static function show_payment_info(stdClass $instance, $fee) { 'cost' => $cost, 'currency' => $instance->currency, 'userid' => $USER->id, - 'instanceid' => $instance->id + 'instanceid' => $instance->id, ]; $id = $DB->insert_record('enrol_wallet_items', $payrecord); $data = [ diff --git a/locallib.php b/locallib.php index ad6829c3..fcf874cd 100644 --- a/locallib.php +++ b/locallib.php @@ -150,7 +150,7 @@ function enrol_wallet_generate_coupons($options) { * @return string */ function enrol_wallet_display_charger_form() { - global $CFG, $DB, $PAGE, $OUTPUT; + global $CFG, $PAGE; require_once($CFG->dirroot.'/enrol/wallet/classes/form/charger_form.php'); if (!has_capability('enrol/wallet:creditdebit', context_system::instance())) { return ''; @@ -170,7 +170,7 @@ function enrol_wallet_display_charger_form() { /** * Process the data submitted by the charger form. * @param object $data - * @return void|string + * @return bool */ function enrol_wallet_handle_charger_form($data) { global $USER, $DB; @@ -210,7 +210,7 @@ function enrol_wallet_handle_charger_form($data) { 'before' => $before, 'after' => ($op == 'balance') ? $before : $after, 'userid' => $userid, - 'op' => 'result' + 'op' => 'result', ]; return enrol_wallet_display_transaction_results($params); @@ -401,14 +401,14 @@ function enrol_wallet_display_coupon_urls() { /** * Displaying the results after charging the wallet of other user. * @param array $params parameters from the charging form results. - * @return bool|string + * @return bool */ function enrol_wallet_display_transaction_results($params = []) { global $OUTPUT; if (!has_capability('enrol/wallet:viewotherbalance', context_system::instance())) { - return ''; + return false; } - ob_start(); + $result = $params['result'] ?? optional_param('result', '', PARAM_ALPHANUM); $before = $params['before'] ?? optional_param('before', '', PARAM_FLOAT); $after = $params['after'] ?? optional_param('after', '', PARAM_FLOAT); @@ -422,30 +422,29 @@ function enrol_wallet_display_transaction_results($params = []) { $errormsg = '

ERROR
' .$err. '
Please go back and check it again

'; - echo $OUTPUT->notification($errormsg); + core\notification::error($errormsg); } else { $user = \core_user::get_user($userid); $userfull = $user->firstname.' '.$user->lastname.' ('.$user->email.')'; // Display the result to the user. - echo $OUTPUT->notification('

Balance Before: ' .$before.'

', 'notifysuccess').'
'; - + core\notification::success('

Balance Before: ' .$before.'

'); if (!empty($result) && is_numeric($result) && false != $result) { $result = 'success'; } if ($after !== $before) { - echo $OUTPUT->notification('succession: ' .$result.' .', 'notifysuccess').'
'; + core\notification::success('succession: ' .$result . '.'); $info = '
the user: '.$userfull.' is now having a balance of '.$after.' after charging him/her by '.( $after - $before). '
'; if ($after !== '') { - echo $OUTPUT->notification('

Balance After: ' .$after.'

', 'notifysuccess'); + core\notification::success('

Balance After: ' .$after.'

'); } if ($after < 0) { - echo $OUTPUT->notification('

THIS USER HAS A NEGATIVE BALANCE

'); + core\notification::warning('

THIS USER HAS A NEGATIVE BALANCE

'); } } else { @@ -457,9 +456,9 @@ function enrol_wallet_display_transaction_results($params = []) { } } // Display the results. + core\notification::info($info); - echo $info; - return ob_get_clean(); + return true; } /** diff --git a/settings.php b/settings.php index 13b12643..8e988b83 100644 --- a/settings.php +++ b/settings.php @@ -323,6 +323,21 @@ get_string('noticecondition_desc', 'enrol_wallet'), 0, PARAM_INT)); + // Enrol instance defaults. + $settings->add(new admin_setting_heading('enrol_wallet_repurchase', + get_string('repurchase', 'enrol_wallet'), + get_string('repurchase_desc', 'enrol_wallet'))); + $settings->add(new admin_setting_configcheckbox('enrol_wallet/repurchase', + get_string('repurchase', 'enrol_wallet'), '', 0)); + $settings->add(new admin_setting_configtext('enrol_wallet/repurchase_firstdis', + get_string('repurchase_firstdis', 'enrol_wallet'), + get_string('repurchase_firstdis_desc', 'enrol_wallet'), + 0, PARAM_INT)); + $settings->add(new admin_setting_configtext('enrol_wallet/repurchase_seconddis', + get_string('repurchase_seconddis', 'enrol_wallet'), + get_string('repurchase_seconddis_desc', 'enrol_wallet'), + 0, PARAM_INT)); + // Enrol instance defaults. $settings->add(new admin_setting_heading('enrol_wallet_defaults', get_string('enrolinstancedefaults', 'admin'), get_string('enrolinstancedefaults_desc', 'admin'))); @@ -331,16 +346,18 @@ get_string('defaultenrol', 'enrol'), get_string('defaultenrol_desc', 'enrol'), 1)); // Adding default payment account. - $accounts = \core_payment\helper::get_payment_accounts_menu($context); - if (empty($accounts)) { - $alert = html_writer::span(get_string('noaccountsavilable', 'payment'), 'alert alert-warning'); - $settings->add(new admin_setting_configempty('enrol_wallet/emptypaymentaccount', '', $alert)); - $accounts = [0 => get_string('noaccount', 'enrol_wallet')]; - } else { - $accounts = [0 => get_string('noaccount', 'enrol_wallet')] + $accounts; + if (class_exists('\core_payment\helper')) { + $accounts = \core_payment\helper::get_payment_accounts_menu($context); + if (empty($accounts)) { + $alert = html_writer::span(get_string('noaccountsavilable', 'payment'), 'alert alert-warning'); + $settings->add(new admin_setting_configempty('enrol_wallet/emptypaymentaccount', '', $alert)); + $accounts = [0 => get_string('noaccount', 'enrol_wallet')]; + } else { + $accounts = [0 => get_string('noaccount', 'enrol_wallet')] + $accounts; + } + $settings->add(new admin_setting_configselect('enrol_wallet/paymentaccount', get_string('paymentaccount', 'payment'), + get_string('paymentaccount_help', 'enrol_wallet'), 0, $accounts)); } - $settings->add(new admin_setting_configselect('enrol_wallet/paymentaccount', get_string('paymentaccount', 'payment'), - get_string('paymentaccount_help', 'enrol_wallet'), 0, $accounts)); // Add default currency. $supportedcurrencies = $walletplugin->get_possible_currencies(get_config('enrol_wallet', 'paymentaccount')); @@ -358,13 +375,18 @@ $settings->hide_if('enrol_wallet/customcurrencycode', 'enrol_wallet/paymentaccount', 'neq', '0'); // Is instance enabled. - $options = [ENROL_INSTANCE_ENABLED => get_string('yes'), - ENROL_INSTANCE_DISABLED => get_string('no')]; + $options = [ + ENROL_INSTANCE_ENABLED => get_string('yes'), + ENROL_INSTANCE_DISABLED => get_string('no'), + ]; $settings->add(new admin_setting_configselect('enrol_wallet/status', get_string('status', 'enrol_wallet'), get_string('status_desc', 'enrol_wallet'), ENROL_INSTANCE_ENABLED, $options)); // Allow users to enrol into new courses by default. - $options = [1 => get_string('yes'), 0 => get_string('no')]; + $options = [ + 1 => get_string('yes'), + 0 => get_string('no'), + ]; $settings->add(new admin_setting_configselect('enrol_wallet/newenrols', get_string('newenrols', 'enrol_wallet'), get_string('newenrols_desc', 'enrol_wallet'), 1, $options)); @@ -381,8 +403,11 @@ $settings->add(new admin_setting_configduration('enrol_wallet/enrolperiod', get_string('enrolperiod', 'enrol_wallet'), get_string('enrolperiod_desc', 'enrol_wallet'), 0)); // Expiry notification. - $options = [0 => get_string('no'), 1 => get_string('expirynotifyenroller', 'core_enrol'), 2 => - get_string('expirynotifyall', 'core_enrol')]; + $options = [ + 0 => get_string('no'), + 1 => get_string('expirynotifyenroller', 'core_enrol'), + 2 => get_string('expirynotifyall', 'core_enrol'), + ]; $settings->add(new admin_setting_configselect('enrol_wallet/expirynotify', get_string('expirynotify', 'core_enrol'), get_string('expirynotify_help', 'core_enrol'), 0, $options)); // Expiry threshold. @@ -399,7 +424,7 @@ $weloptions = [ ENROL_DO_NOT_SEND_EMAIL => get_string('no'), ENROL_SEND_EMAIL_FROM_COURSE_CONTACT => get_string('sendfromcoursecontact', 'enrol'), - ENROL_SEND_EMAIL_FROM_NOREPLY => get_string('sendfromnoreply', 'enrol') + ENROL_SEND_EMAIL_FROM_NOREPLY => get_string('sendfromnoreply', 'enrol'), ]; $settings->add(new admin_setting_configselect('enrol_wallet/sendcoursewelcomemessage', get_string('sendcoursewelcomemessage', 'enrol_wallet'), diff --git a/tests/enrol_wallet_test.php b/tests/enrol_wallet_test.php index e99090e7..383c23e3 100644 --- a/tests/enrol_wallet_test.php +++ b/tests/enrol_wallet_test.php @@ -42,7 +42,7 @@ class enrol_wallet_test extends \advanced_testcase { * Basic test for enrol wallet plugin * @covers \enrol_wallet_plugin */ - public function test_basics() { + public function test_basics(): void { $this->resetAfterTest(); $this->assertTrue(enrol_is_enabled('wallet')); @@ -56,7 +56,7 @@ public function test_basics() { * Test function sync() not throw any errors when there is nothing to do. * @covers ::sync() */ - public function test_sync_nothing() { + public function test_sync_nothing(): void { global $SITE; $walletplugin = enrol_get_plugin('wallet'); @@ -85,12 +85,12 @@ public function test_longtimnosee() { $trace = new \progress_trace_buffer(new \text_progress_trace(), false); // Prepare some data. - $studentrole = $DB->get_record('role', array('shortname' => 'student')); + $studentrole = $DB->get_record('role', ['shortname' => 'student']); $this->assertNotEmpty($studentrole); - $teacherrole = $DB->get_record('role', array('shortname' => 'teacher')); + $teacherrole = $DB->get_record('role', ['shortname' => 'teacher']); $this->assertNotEmpty($teacherrole); - $record = array('firstaccess' => $now - DAYSECS * 800); + $record = ['firstaccess' => $now - DAYSECS * 800]; $record['lastaccess'] = $now - DAYSECS * 100; $user1 = $this->getDataGenerator()->create_user($record); $record['lastaccess'] = $now - DAYSECS * 10; @@ -104,12 +104,12 @@ public function test_longtimnosee() { $course2 = $this->getDataGenerator()->create_course(); $course3 = $this->getDataGenerator()->create_course(); - $this->assertEquals(3, $DB->count_records('enrol', array('enrol' => 'wallet'))); - $instance1 = $DB->get_record('enrol', array('courseid' => $course1->id, 'enrol' => 'wallet'), '*', MUST_EXIST); - $instance2 = $DB->get_record('enrol', array('courseid' => $course2->id, 'enrol' => 'wallet'), '*', MUST_EXIST); - $instance3 = $DB->get_record('enrol', array('courseid' => $course3->id, 'enrol' => 'wallet'), '*', MUST_EXIST); - $id = $walletplugin->add_instance($course3, array('status' => ENROL_INSTANCE_ENABLED, 'roleid' => $teacherrole->id)); - $instance3b = $DB->get_record('enrol', array('id' => $id), '*', MUST_EXIST); + $this->assertEquals(3, $DB->count_records('enrol', ['enrol' => 'wallet'])); + $instance1 = $DB->get_record('enrol', ['courseid' => $course1->id, 'enrol' => 'wallet'], '*', MUST_EXIST); + $instance2 = $DB->get_record('enrol', ['courseid' => $course2->id, 'enrol' => 'wallet'], '*', MUST_EXIST); + $instance3 = $DB->get_record('enrol', ['courseid' => $course3->id, 'enrol' => 'wallet'], '*', MUST_EXIST); + $id = $walletplugin->add_instance($course3, ['status' => ENROL_INSTANCE_ENABLED, 'roleid' => $teacherrole->id]); + $instance3b = $DB->get_record('enrol', ['id' => $id], '*', MUST_EXIST); unset($id); $this->assertEquals($studentrole->id, $instance1->roleid); @@ -119,15 +119,18 @@ public function test_longtimnosee() { $walletplugin->enrol_user($instance1, $user2->id, $studentrole->id); $walletplugin->enrol_user($instance1, $user3->id, $studentrole->id); $this->assertEquals(3, $DB->count_records('user_enrolments')); - $DB->insert_record('user_lastaccess', array('userid' => $user2->id, + $DB->insert_record('user_lastaccess', ['userid' => $user2->id, 'courseid' => $course1->id, - 'timeaccess' => $now - DAYSECS * 20)); - $DB->insert_record('user_lastaccess', array('userid' => $user3->id, + 'timeaccess' => $now - DAYSECS * 20, + ]); + $DB->insert_record('user_lastaccess', ['userid' => $user3->id, 'courseid' => $course1->id, - 'timeaccess' => $now - DAYSECS * 2)); - $DB->insert_record('user_lastaccess', array('userid' => $user4->id, + 'timeaccess' => $now - DAYSECS * 2, + ]); + $DB->insert_record('user_lastaccess', ['userid' => $user4->id, 'courseid' => $course1->id, - 'timeaccess' => $now - 60)); + 'timeaccess' => $now - 60, + ]); $this->assertEquals($studentrole->id, $instance3->roleid); $instance3->customint2 = 60 * 60 * 24 * 50; @@ -138,26 +141,29 @@ public function test_longtimnosee() { $walletplugin->enrol_user($instance3b, $user1->id, $teacherrole->id); $walletplugin->enrol_user($instance3b, $user4->id, $teacherrole->id); $this->assertEquals(8, $DB->count_records('user_enrolments')); - $DB->insert_record('user_lastaccess', array('userid' => $user2->id, + $DB->insert_record('user_lastaccess', ['userid' => $user2->id, 'courseid' => $course3->id, - 'timeaccess' => $now - DAYSECS * 11)); - $DB->insert_record('user_lastaccess', array('userid' => $user3->id, + 'timeaccess' => $now - DAYSECS * 11, + ]); + $DB->insert_record('user_lastaccess', ['userid' => $user3->id, 'courseid' => $course3->id, - 'timeaccess' => $now - DAYSECS * 200)); - $DB->insert_record('user_lastaccess', array('userid' => $user4->id, + 'timeaccess' => $now - DAYSECS * 200, + ]); + $DB->insert_record('user_lastaccess', ['userid' => $user4->id, 'courseid' => $course3->id, - 'timeaccess' => $now - DAYSECS * 200)); + 'timeaccess' => $now - DAYSECS * 200, + ]); - $maninstance2 = $DB->get_record('enrol', array('courseid' => $course2->id, 'enrol' => 'manual'), '*', MUST_EXIST); - $maninstance3 = $DB->get_record('enrol', array('courseid' => $course3->id, 'enrol' => 'manual'), '*', MUST_EXIST); + $maninstance2 = $DB->get_record('enrol', ['courseid' => $course2->id, 'enrol' => 'manual'], '*', MUST_EXIST); + $maninstance3 = $DB->get_record('enrol', ['courseid' => $course3->id, 'enrol' => 'manual'], '*', MUST_EXIST); $manualplugin->enrol_user($maninstance2, $user1->id, $studentrole->id); $manualplugin->enrol_user($maninstance3, $user1->id, $teacherrole->id); $this->assertEquals(10, $DB->count_records('user_enrolments')); $this->assertEquals(9, $DB->count_records('role_assignments')); - $this->assertEquals(7, $DB->count_records('role_assignments', array('roleid' => $studentrole->id))); - $this->assertEquals(2, $DB->count_records('role_assignments', array('roleid' => $teacherrole->id))); + $this->assertEquals(7, $DB->count_records('role_assignments', ['roleid' => $studentrole->id])); + $this->assertEquals(2, $DB->count_records('role_assignments', ['roleid' => $teacherrole->id])); // Execute sync - this is the same thing used from cron. $walletplugin->sync($trace, $course2->id); @@ -165,19 +171,19 @@ public function test_longtimnosee() { $trace->reset_buffer(); $this->assertEquals(10, $DB->count_records('user_enrolments')); $this->assertStringContainsString('No expired enrol_wallet enrolments detected', $output); - $this->assertTrue($DB->record_exists('user_enrolments', array('enrolid' => $instance1->id, 'userid' => $user1->id))); - $this->assertTrue($DB->record_exists('user_enrolments', array('enrolid' => $instance1->id, 'userid' => $user2->id))); - $this->assertTrue($DB->record_exists('user_enrolments', array('enrolid' => $instance3->id, 'userid' => $user1->id))); - $this->assertTrue($DB->record_exists('user_enrolments', array('enrolid' => $instance3->id, 'userid' => $user3->id))); + $this->assertTrue($DB->record_exists('user_enrolments', ['enrolid' => $instance1->id, 'userid' => $user1->id])); + $this->assertTrue($DB->record_exists('user_enrolments', ['enrolid' => $instance1->id, 'userid' => $user2->id])); + $this->assertTrue($DB->record_exists('user_enrolments', ['enrolid' => $instance3->id, 'userid' => $user1->id])); + $this->assertTrue($DB->record_exists('user_enrolments', ['enrolid' => $instance3->id, 'userid' => $user3->id])); $walletplugin->sync($trace, null); $output = $trace->get_buffer(); $trace->reset_buffer(); $this->assertEquals(6, $DB->count_records('user_enrolments')); - $this->assertFalse($DB->record_exists('user_enrolments', array('enrolid' => $instance1->id, 'userid' => $user1->id))); - $this->assertFalse($DB->record_exists('user_enrolments', array('enrolid' => $instance1->id, 'userid' => $user2->id))); - $this->assertFalse($DB->record_exists('user_enrolments', array('enrolid' => $instance3->id, 'userid' => $user1->id))); - $this->assertFalse($DB->record_exists('user_enrolments', array('enrolid' => $instance3->id, 'userid' => $user3->id))); + $this->assertFalse($DB->record_exists('user_enrolments', ['enrolid' => $instance1->id, 'userid' => $user1->id])); + $this->assertFalse($DB->record_exists('user_enrolments', ['enrolid' => $instance1->id, 'userid' => $user2->id])); + $this->assertFalse($DB->record_exists('user_enrolments', ['enrolid' => $instance3->id, 'userid' => $user1->id])); + $this->assertFalse($DB->record_exists('user_enrolments', ['enrolid' => $instance3->id, 'userid' => $user3->id])); $this->assertStringContainsString('unenrolling user ' . $user1->id . ' from course ' . $course1->id . ' as they have did not log in for at least 14 days', $output); $this->assertStringContainsString('unenrolling user ' . $user1->id . ' from course ' . $course3->id . @@ -189,15 +195,15 @@ public function test_longtimnosee() { $this->assertStringNotContainsString('unenrolling user ' . $user4->id, $output); $this->assertEquals(6, $DB->count_records('role_assignments')); - $this->assertEquals(4, $DB->count_records('role_assignments', array('roleid' => $studentrole->id))); - $this->assertEquals(2, $DB->count_records('role_assignments', array('roleid' => $teacherrole->id))); + $this->assertEquals(4, $DB->count_records('role_assignments', ['roleid' => $studentrole->id])); + $this->assertEquals(2, $DB->count_records('role_assignments', ['roleid' => $teacherrole->id])); } /** * Text expire enrolment. * @covers ::expired() */ - public function test_expired() { + public function test_expired(): void { global $DB; $this->resetAfterTest(); @@ -211,11 +217,11 @@ public function test_expired() { $trace = new \null_progress_trace(); // Prepare some data. - $studentrole = $DB->get_record('role', array('shortname' => 'student')); + $studentrole = $DB->get_record('role', ['shortname' => 'student']); $this->assertNotEmpty($studentrole); - $teacherrole = $DB->get_record('role', array('shortname' => 'teacher')); + $teacherrole = $DB->get_record('role', ['shortname' => 'teacher']); $this->assertNotEmpty($teacherrole); - $managerrole = $DB->get_record('role', array('shortname' => 'manager')); + $managerrole = $DB->get_record('role', ['shortname' => 'manager']); $this->assertNotEmpty($managerrole); $user1 = $this->getDataGenerator()->create_user(); @@ -230,28 +236,28 @@ public function test_expired() { $context2 = \context_course::instance($course2->id); $context3 = \context_course::instance($course3->id); - $this->assertEquals(3, $DB->count_records('enrol', array('enrol' => 'wallet'))); - $instance1 = $DB->get_record('enrol', array('courseid' => $course1->id, 'enrol' => 'wallet'), '*', MUST_EXIST); + $this->assertEquals(3, $DB->count_records('enrol', ['enrol' => 'wallet'])); + $instance1 = $DB->get_record('enrol', ['courseid' => $course1->id, 'enrol' => 'wallet'], '*', MUST_EXIST); $this->assertEquals($studentrole->id, $instance1->roleid); - $instance2 = $DB->get_record('enrol', array('courseid' => $course2->id, 'enrol' => 'wallet'), '*', MUST_EXIST); + $instance2 = $DB->get_record('enrol', ['courseid' => $course2->id, 'enrol' => 'wallet'], '*', MUST_EXIST); $this->assertEquals($studentrole->id, $instance2->roleid); - $instance3 = $DB->get_record('enrol', array('courseid' => $course3->id, 'enrol' => 'wallet'), '*', MUST_EXIST); + $instance3 = $DB->get_record('enrol', ['courseid' => $course3->id, 'enrol' => 'wallet'], '*', MUST_EXIST); $this->assertEquals($studentrole->id, $instance3->roleid); - $id = $walletplugin->add_instance($course3, array('status' => ENROL_INSTANCE_ENABLED, 'roleid' => $teacherrole->id)); - $instance3b = $DB->get_record('enrol', array('id' => $id), '*', MUST_EXIST); + $id = $walletplugin->add_instance($course3, ['status' => ENROL_INSTANCE_ENABLED, 'roleid' => $teacherrole->id]); + $instance3b = $DB->get_record('enrol', ['id' => $id], '*', MUST_EXIST); $this->assertEquals($teacherrole->id, $instance3b->roleid); unset($id); - $maninstance2 = $DB->get_record('enrol', array('courseid' => $course2->id, 'enrol' => 'manual'), '*', MUST_EXIST); - $maninstance3 = $DB->get_record('enrol', array('courseid' => $course3->id, 'enrol' => 'manual'), '*', MUST_EXIST); + $maninstance2 = $DB->get_record('enrol', ['courseid' => $course2->id, 'enrol' => 'manual'], '*', MUST_EXIST); + $maninstance3 = $DB->get_record('enrol', ['courseid' => $course3->id, 'enrol' => 'manual'], '*', MUST_EXIST); $manualplugin->enrol_user($maninstance2, $user1->id, $studentrole->id); $manualplugin->enrol_user($maninstance3, $user1->id, $teacherrole->id); $this->assertEquals(2, $DB->count_records('user_enrolments')); $this->assertEquals(2, $DB->count_records('role_assignments')); - $this->assertEquals(1, $DB->count_records('role_assignments', array('roleid' => $studentrole->id))); - $this->assertEquals(1, $DB->count_records('role_assignments', array('roleid' => $teacherrole->id))); + $this->assertEquals(1, $DB->count_records('role_assignments', ['roleid' => $studentrole->id])); + $this->assertEquals(1, $DB->count_records('role_assignments', ['roleid' => $teacherrole->id])); $walletplugin->enrol_user($instance1, $user1->id, $studentrole->id); $walletplugin->enrol_user($instance1, $user2->id, $studentrole->id); @@ -267,8 +273,8 @@ public function test_expired() { $this->assertEquals(10, $DB->count_records('user_enrolments')); $this->assertEquals(10, $DB->count_records('role_assignments')); - $this->assertEquals(7, $DB->count_records('role_assignments', array('roleid' => $studentrole->id))); - $this->assertEquals(2, $DB->count_records('role_assignments', array('roleid' => $teacherrole->id))); + $this->assertEquals(7, $DB->count_records('role_assignments', ['roleid' => $studentrole->id])); + $this->assertEquals(2, $DB->count_records('role_assignments', ['roleid' => $teacherrole->id])); // Execute tests. $this->assertEquals(ENROL_EXT_REMOVED_KEEP, $walletplugin->get_config('expiredaction')); @@ -284,20 +290,24 @@ public function test_expired() { $walletplugin->sync($trace, null); $this->assertEquals(10, $DB->count_records('user_enrolments')); $this->assertEquals(7, $DB->count_records('role_assignments')); - $this->assertEquals(5, $DB->count_records('role_assignments', array('roleid' => $studentrole->id))); - $this->assertEquals(1, $DB->count_records('role_assignments', array('roleid' => $teacherrole->id))); - $this->assertFalse($DB->record_exists('role_assignments', array('contextid' => $context1->id, + $this->assertEquals(5, $DB->count_records('role_assignments', ['roleid' => $studentrole->id])); + $this->assertEquals(1, $DB->count_records('role_assignments', ['roleid' => $teacherrole->id])); + $this->assertFalse($DB->record_exists('role_assignments', ['contextid' => $context1->id, 'userid' => $user3->id, - 'roleid' => $studentrole->id))); - $this->assertFalse($DB->record_exists('role_assignments', array('contextid' => $context3->id, + 'roleid' => $studentrole->id, + ])); + $this->assertFalse($DB->record_exists('role_assignments', ['contextid' => $context3->id, 'userid' => $user2->id, - 'roleid' => $studentrole->id))); - $this->assertFalse($DB->record_exists('role_assignments', array('contextid' => $context3->id, + 'roleid' => $studentrole->id, + ])); + $this->assertFalse($DB->record_exists('role_assignments', ['contextid' => $context3->id, 'userid' => $user1->id, - 'roleid' => $teacherrole->id))); - $this->assertTrue($DB->record_exists('role_assignments', array('contextid' => $context3->id, + 'roleid' => $teacherrole->id, + ])); + $this->assertTrue($DB->record_exists('role_assignments', ['contextid' => $context3->id, 'userid' => $user1->id, - 'roleid' => $studentrole->id))); + 'roleid' => $studentrole->id, + ])); $walletplugin->set_config('expiredaction', ENROL_EXT_REMOVED_UNENROL); @@ -306,24 +316,24 @@ public function test_expired() { role_assign($teacherrole->id, $user1->id, $context3->id); $this->assertEquals(10, $DB->count_records('user_enrolments')); $this->assertEquals(10, $DB->count_records('role_assignments')); - $this->assertEquals(7, $DB->count_records('role_assignments', array('roleid' => $studentrole->id))); - $this->assertEquals(2, $DB->count_records('role_assignments', array('roleid' => $teacherrole->id))); + $this->assertEquals(7, $DB->count_records('role_assignments', ['roleid' => $studentrole->id])); + $this->assertEquals(2, $DB->count_records('role_assignments', ['roleid' => $teacherrole->id])); $walletplugin->sync($trace, null); $this->assertEquals(7, $DB->count_records('user_enrolments')); - $this->assertFalse($DB->record_exists('user_enrolments', array('enrolid' => $instance1->id, 'userid' => $user3->id))); - $this->assertFalse($DB->record_exists('user_enrolments', array('enrolid' => $instance3->id, 'userid' => $user2->id))); - $this->assertFalse($DB->record_exists('user_enrolments', array('enrolid' => $instance3b->id, 'userid' => $user1->id))); + $this->assertFalse($DB->record_exists('user_enrolments', ['enrolid' => $instance1->id, 'userid' => $user3->id])); + $this->assertFalse($DB->record_exists('user_enrolments', ['enrolid' => $instance3->id, 'userid' => $user2->id])); + $this->assertFalse($DB->record_exists('user_enrolments', ['enrolid' => $instance3b->id, 'userid' => $user1->id])); $this->assertEquals(6, $DB->count_records('role_assignments')); - $this->assertEquals(5, $DB->count_records('role_assignments', array('roleid' => $studentrole->id))); - $this->assertEquals(1, $DB->count_records('role_assignments', array('roleid' => $teacherrole->id))); + $this->assertEquals(5, $DB->count_records('role_assignments', ['roleid' => $studentrole->id])); + $this->assertEquals(1, $DB->count_records('role_assignments', ['roleid' => $teacherrole->id])); } /** * Test send expiry notification. * @covers ::send_expiry_notification() */ - public function test_send_expiry_notifications() { + public function test_send_expiry_notifications(): void { global $DB; $this->resetAfterTest(); $this->preventResetByRollback(); // Messaging does not like transactions... @@ -339,55 +349,55 @@ public function test_send_expiry_notifications() { $walletplugin->set_config('expirynotifylast', $now - 60 * 60 * 24); $walletplugin->set_config('expirynotifyhour', 0); - $studentrole = $DB->get_record('role', array('shortname' => 'student')); + $studentrole = $DB->get_record('role', ['shortname' => 'student']); $this->assertNotEmpty($studentrole); - $editingteacherrole = $DB->get_record('role', array('shortname' => 'editingteacher')); + $editingteacherrole = $DB->get_record('role', ['shortname' => 'editingteacher']); $this->assertNotEmpty($editingteacherrole); - $managerrole = $DB->get_record('role', array('shortname' => 'manager')); + $managerrole = $DB->get_record('role', ['shortname' => 'manager']); $this->assertNotEmpty($managerrole); - $user1 = $this->getDataGenerator()->create_user(array('lastname' => 'xuser1')); - $user2 = $this->getDataGenerator()->create_user(array('lastname' => 'xuser2')); - $user3 = $this->getDataGenerator()->create_user(array('lastname' => 'xuser3')); - $user4 = $this->getDataGenerator()->create_user(array('lastname' => 'xuser4')); - $user5 = $this->getDataGenerator()->create_user(array('lastname' => 'xuser5')); - $user6 = $this->getDataGenerator()->create_user(array('lastname' => 'xuser6')); - $user7 = $this->getDataGenerator()->create_user(array('lastname' => 'xuser6')); - $user8 = $this->getDataGenerator()->create_user(array('lastname' => 'xuser6')); - - $course1 = $this->getDataGenerator()->create_course(array('fullname' => 'xcourse1')); - $course2 = $this->getDataGenerator()->create_course(array('fullname' => 'xcourse2')); - $course3 = $this->getDataGenerator()->create_course(array('fullname' => 'xcourse3')); - $course4 = $this->getDataGenerator()->create_course(array('fullname' => 'xcourse4')); - - $this->assertEquals(4, $DB->count_records('enrol', array('enrol' => 'manual'))); - $this->assertEquals(4, $DB->count_records('enrol', array('enrol' => 'wallet'))); - - $maninstance1 = $DB->get_record('enrol', array('courseid' => $course1->id, 'enrol' => 'manual'), '*', MUST_EXIST); - $instance1 = $DB->get_record('enrol', array('courseid' => $course1->id, 'enrol' => 'wallet'), '*', MUST_EXIST); + $user1 = $this->getDataGenerator()->create_user(['lastname' => 'xuser1']); + $user2 = $this->getDataGenerator()->create_user(['lastname' => 'xuser2']); + $user3 = $this->getDataGenerator()->create_user(['lastname' => 'xuser3']); + $user4 = $this->getDataGenerator()->create_user(['lastname' => 'xuser4']); + $user5 = $this->getDataGenerator()->create_user(['lastname' => 'xuser5']); + $user6 = $this->getDataGenerator()->create_user(['lastname' => 'xuser6']); + $user7 = $this->getDataGenerator()->create_user(['lastname' => 'xuser6']); + $user8 = $this->getDataGenerator()->create_user(['lastname' => 'xuser6']); + + $course1 = $this->getDataGenerator()->create_course(['fullname' => 'xcourse1']); + $course2 = $this->getDataGenerator()->create_course(['fullname' => 'xcourse2']); + $course3 = $this->getDataGenerator()->create_course(['fullname' => 'xcourse3']); + $course4 = $this->getDataGenerator()->create_course(['fullname' => 'xcourse4']); + + $this->assertEquals(4, $DB->count_records('enrol', ['enrol' => 'manual'])); + $this->assertEquals(4, $DB->count_records('enrol', ['enrol' => 'wallet'])); + + $maninstance1 = $DB->get_record('enrol', ['courseid' => $course1->id, 'enrol' => 'manual'], '*', MUST_EXIST); + $instance1 = $DB->get_record('enrol', ['courseid' => $course1->id, 'enrol' => 'wallet'], '*', MUST_EXIST); $instance1->expirythreshold = 60 * 60 * 24 * 4; $instance1->expirynotify = 1; $instance1->notifyall = 1; $instance1->status = ENROL_INSTANCE_ENABLED; $DB->update_record('enrol', $instance1); - $instance2 = $DB->get_record('enrol', array('courseid' => $course2->id, 'enrol' => 'wallet'), '*', MUST_EXIST); + $instance2 = $DB->get_record('enrol', ['courseid' => $course2->id, 'enrol' => 'wallet'], '*', MUST_EXIST); $instance2->expirythreshold = 60 * 60 * 24 * 1; $instance2->expirynotify = 1; $instance2->notifyall = 1; $instance2->status = ENROL_INSTANCE_ENABLED; $DB->update_record('enrol', $instance2); - $maninstance3 = $DB->get_record('enrol', array('courseid' => $course3->id, 'enrol' => 'manual'), '*', MUST_EXIST); - $instance3 = $DB->get_record('enrol', array('courseid' => $course3->id, 'enrol' => 'wallet'), '*', MUST_EXIST); + $maninstance3 = $DB->get_record('enrol', ['courseid' => $course3->id, 'enrol' => 'manual'], '*', MUST_EXIST); + $instance3 = $DB->get_record('enrol', ['courseid' => $course3->id, 'enrol' => 'wallet'], '*', MUST_EXIST); $instance3->expirythreshold = 60 * 60 * 24 * 1; $instance3->expirynotify = 1; $instance3->notifyall = 0; $instance3->status = ENROL_INSTANCE_ENABLED; $DB->update_record('enrol', $instance3); - $maninstance4 = $DB->get_record('enrol', array('courseid' => $course4->id, 'enrol' => 'manual'), '*', MUST_EXIST); - $instance4 = $DB->get_record('enrol', array('courseid' => $course4->id, 'enrol' => 'wallet'), '*', MUST_EXIST); + $maninstance4 = $DB->get_record('enrol', ['courseid' => $course4->id, 'enrol' => 'manual'], '*', MUST_EXIST); + $instance4 = $DB->get_record('enrol', ['courseid' => $course4->id, 'enrol' => 'wallet'], '*', MUST_EXIST); $instance4->expirythreshold = 60 * 60 * 24 * 1; $instance4->expirynotify = 0; $instance4->notifyall = 0; @@ -508,7 +518,7 @@ public function test_send_expiry_notifications() { * Test show enrol me link * @covers ::show_enrolme_link() */ - public function test_show_enrolme_link() { + public function test_show_enrolme_link(): void { global $DB, $CFG; $this->resetAfterTest(); $this->preventResetByRollback(); // Messaging does not like transactions... @@ -522,7 +532,7 @@ public function test_show_enrolme_link() { transactions::payment_topup(500, $user1->id); transactions::payment_topup(250, $user2->id); - $studentrole = $DB->get_record('role', array('shortname' => 'student')); + $studentrole = $DB->get_record('role', ['shortname' => 'student']); $this->assertNotEmpty($studentrole); $course1 = $this->getDataGenerator()->create_course(); @@ -543,35 +553,35 @@ public function test_show_enrolme_link() { $cohort2 = $this->getDataGenerator()->create_cohort(); // New enrolments are allowed and enrolment instance is enabled. - $instance1 = $DB->get_record('enrol', array('courseid' => $course1->id, 'enrol' => 'wallet'), '*', MUST_EXIST); + $instance1 = $DB->get_record('enrol', ['courseid' => $course1->id, 'enrol' => 'wallet'], '*', MUST_EXIST); $instance1->customint6 = 1; $instance1->cost = 250; $DB->update_record('enrol', $instance1); $walletplugin->update_status($instance1, ENROL_INSTANCE_ENABLED); // New enrolments are not allowed, but enrolment instance is enabled. - $instance2 = $DB->get_record('enrol', array('courseid' => $course2->id, 'enrol' => 'wallet'), '*', MUST_EXIST); + $instance2 = $DB->get_record('enrol', ['courseid' => $course2->id, 'enrol' => 'wallet'], '*', MUST_EXIST); $instance2->customint6 = 0; $instance2->cost = 250; $DB->update_record('enrol', $instance2); $walletplugin->update_status($instance2, ENROL_INSTANCE_ENABLED); // New enrolments are allowed , but enrolment instance is disabled. - $instance3 = $DB->get_record('enrol', array('courseid' => $course3->id, 'enrol' => 'wallet'), '*', MUST_EXIST); + $instance3 = $DB->get_record('enrol', ['courseid' => $course3->id, 'enrol' => 'wallet'], '*', MUST_EXIST); $instance3->customint6 = 1; $instance3->cost = 250; $DB->update_record('enrol', $instance3); $walletplugin->update_status($instance3, ENROL_INSTANCE_DISABLED); // New enrolments are not allowed and enrolment instance is disabled. - $instance4 = $DB->get_record('enrol', array('courseid' => $course4->id, 'enrol' => 'wallet'), '*', MUST_EXIST); + $instance4 = $DB->get_record('enrol', ['courseid' => $course4->id, 'enrol' => 'wallet'], '*', MUST_EXIST); $instance4->customint6 = 0; $instance4->cost = 250; $DB->update_record('enrol', $instance4); $walletplugin->update_status($instance4, ENROL_INSTANCE_DISABLED); // Cohort member test. - $instance5 = $DB->get_record('enrol', array('courseid' => $course5->id, 'enrol' => 'wallet'), '*', MUST_EXIST); + $instance5 = $DB->get_record('enrol', ['courseid' => $course5->id, 'enrol' => 'wallet'], '*', MUST_EXIST); $instance5->customint6 = 1; $instance5->customint5 = $cohort1->id; $instance5->cost = 250; @@ -579,7 +589,7 @@ public function test_show_enrolme_link() { $walletplugin->update_status($instance5, ENROL_INSTANCE_ENABLED); $id = $walletplugin->add_instance($course5, $walletplugin->get_instance_defaults()); - $instance6 = $DB->get_record('enrol', array('id' => $id), '*', MUST_EXIST); + $instance6 = $DB->get_record('enrol', ['id' => $id], '*', MUST_EXIST); $instance6->customint6 = 1; $instance6->customint5 = $cohort2->id; $instance6->cost = 250; @@ -587,7 +597,7 @@ public function test_show_enrolme_link() { $walletplugin->update_status($instance6, ENROL_INSTANCE_ENABLED); // Enrol start date is in future. - $instance7 = $DB->get_record('enrol', array('courseid' => $course6->id, 'enrol' => 'wallet'), '*', MUST_EXIST); + $instance7 = $DB->get_record('enrol', ['courseid' => $course6->id, 'enrol' => 'wallet'], '*', MUST_EXIST); $instance7->customint6 = 1; $instance7->enrolstartdate = time() + 60; $instance7->cost = 250; @@ -595,7 +605,7 @@ public function test_show_enrolme_link() { $walletplugin->update_status($instance7, ENROL_INSTANCE_ENABLED); // Enrol start date is in past. - $instance8 = $DB->get_record('enrol', array('courseid' => $course7->id, 'enrol' => 'wallet'), '*', MUST_EXIST); + $instance8 = $DB->get_record('enrol', ['courseid' => $course7->id, 'enrol' => 'wallet'], '*', MUST_EXIST); $instance8->customint6 = 1; $instance8->enrolstartdate = time() - 60; $instance8->cost = 250; @@ -603,7 +613,7 @@ public function test_show_enrolme_link() { $walletplugin->update_status($instance8, ENROL_INSTANCE_ENABLED); // Enrol end date is in future. - $instance9 = $DB->get_record('enrol', array('courseid' => $course8->id, 'enrol' => 'wallet'), '*', MUST_EXIST); + $instance9 = $DB->get_record('enrol', ['courseid' => $course8->id, 'enrol' => 'wallet'], '*', MUST_EXIST); $instance9->customint6 = 1; $instance9->enrolenddate = time() + 60; $instance9->cost = 250; @@ -611,7 +621,7 @@ public function test_show_enrolme_link() { $walletplugin->update_status($instance9, ENROL_INSTANCE_ENABLED); // Enrol end date is in past. - $instance10 = $DB->get_record('enrol', array('courseid' => $course9->id, 'enrol' => 'wallet'), '*', MUST_EXIST); + $instance10 = $DB->get_record('enrol', ['courseid' => $course9->id, 'enrol' => 'wallet'], '*', MUST_EXIST); $instance10->customint6 = 1; $instance10->enrolenddate = time() - 60; $instance10->cost = 250; @@ -619,7 +629,7 @@ public function test_show_enrolme_link() { $walletplugin->update_status($instance10, ENROL_INSTANCE_ENABLED); // Maximum enrolments reached. - $instance11 = $DB->get_record('enrol', array('courseid' => $course10->id, 'enrol' => 'wallet'), '*', MUST_EXIST); + $instance11 = $DB->get_record('enrol', ['courseid' => $course10->id, 'enrol' => 'wallet'], '*', MUST_EXIST); $instance11->customint6 = 1; $instance11->customint3 = 1; $instance11->cost = 250; @@ -628,7 +638,7 @@ public function test_show_enrolme_link() { $walletplugin->enrol_user($instance11, $user2->id, $studentrole->id); // Maximum enrolments not reached. - $instance12 = $DB->get_record('enrol', array('courseid' => $course11->id, 'enrol' => 'wallet'), '*', MUST_EXIST); + $instance12 = $DB->get_record('enrol', ['courseid' => $course11->id, 'enrol' => 'wallet'], '*', MUST_EXIST); $instance12->customint6 = 1; $instance12->customint3 = 1; $instance12->cost = 250; @@ -636,7 +646,7 @@ public function test_show_enrolme_link() { $walletplugin->update_status($instance12, ENROL_INSTANCE_ENABLED); // Enrolment restricted by enrolment in another course. - $instance13 = $DB->get_record('enrol', array('courseid' => $course12->id, 'enrol' => 'wallet'), '*', MUST_EXIST); + $instance13 = $DB->get_record('enrol', ['courseid' => $course12->id, 'enrol' => 'wallet'], '*', MUST_EXIST); $instance13->customint6 = 1; $instance13->customint7 = 1; $instance13->customchar3 = $course1->id; @@ -644,7 +654,7 @@ public function test_show_enrolme_link() { $DB->update_record('enrol', $instance13); $walletplugin->update_status($instance13, ENROL_INSTANCE_ENABLED); // Empty cost. - $instance14 = $DB->get_record('enrol', array('courseid' => $course13->id, 'enrol' => 'wallet'), '*', MUST_EXIST); + $instance14 = $DB->get_record('enrol', ['courseid' => $course13->id, 'enrol' => 'wallet'], '*', MUST_EXIST); $instance14->customint6 = 1; $DB->update_record('enrol', $instance14); $walletplugin->update_status($instance14, ENROL_INSTANCE_ENABLED); @@ -682,7 +692,7 @@ public function test_show_enrolme_link() { * This will check user enrolment only, rest has been tested in test_show_enrolme_link. * @covers ::can_self_enrol() */ - public function test_can_self_enrol() { + public function test_can_self_enrol(): void { global $DB, $CFG; $this->resetAfterTest(); $this->preventResetByRollback(); @@ -695,14 +705,14 @@ public function test_can_self_enrol() { transactions::payment_topup(250, $user1->id); transactions::payment_topup(250, $user2->id); - $studentrole = $DB->get_record('role', array('shortname' => 'student')); + $studentrole = $DB->get_record('role', ['shortname' => 'student']); $this->assertNotEmpty($studentrole); - $editingteacherrole = $DB->get_record('role', array('shortname' => 'editingteacher')); + $editingteacherrole = $DB->get_record('role', ['shortname' => 'editingteacher']); $this->assertNotEmpty($editingteacherrole); $course1 = $this->getDataGenerator()->create_course(); - $instance1 = $DB->get_record('enrol', array('courseid' => $course1->id, 'enrol' => 'wallet'), '*', MUST_EXIST); + $instance1 = $DB->get_record('enrol', ['courseid' => $course1->id, 'enrol' => 'wallet'], '*', MUST_EXIST); $instance1->customint6 = 1; $instance1->cost = 200; $DB->update_record('enrol', $instance1); @@ -710,7 +720,7 @@ public function test_can_self_enrol() { $walletplugin->enrol_user($instance1, $user2->id, $editingteacherrole->id); // Guest user cannot enrol. - $guest = $DB->get_record('user', array('id' => $CFG->siteguest)); + $guest = $DB->get_record('user', ['id' => $CFG->siteguest]); $this->setUser($guest); $this->assertStringContainsString(get_string('noguestaccess', 'enrol'), $walletplugin->can_self_enrol($instance1, true)); @@ -726,7 +736,7 @@ public function test_can_self_enrol() { // Insufficient balance. $course2 = $this->getDataGenerator()->create_course(); - $instance2 = $DB->get_record('enrol', array('courseid' => $course2->id, 'enrol' => 'wallet'), '*', MUST_EXIST); + $instance2 = $DB->get_record('enrol', ['courseid' => $course2->id, 'enrol' => 'wallet'], '*', MUST_EXIST); $instance2->customint6 = 1; $instance2->cost = 500; $DB->update_record('enrol', $instance2); @@ -735,7 +745,7 @@ public function test_can_self_enrol() { // Disabled instance. $course3 = $this->getDataGenerator()->create_course(); - $instance3 = $DB->get_record('enrol', array('courseid' => $course3->id, 'enrol' => 'wallet'), '*', MUST_EXIST); + $instance3 = $DB->get_record('enrol', ['courseid' => $course3->id, 'enrol' => 'wallet'], '*', MUST_EXIST); $instance3->customint6 = 1; $instance3->cost = 50; $DB->update_record('enrol', $instance3); @@ -744,7 +754,7 @@ public function test_can_self_enrol() { // Cannot enrol early. $course4 = $this->getDataGenerator()->create_course(); - $instance4 = $DB->get_record('enrol', array('courseid' => $course4->id, 'enrol' => 'wallet'), '*', MUST_EXIST); + $instance4 = $DB->get_record('enrol', ['courseid' => $course4->id, 'enrol' => 'wallet'], '*', MUST_EXIST); $instance4->customint6 = 1; $instance4->cost = 50; $instance4->enrolstartdate = time() + 3 * DAYSECS; @@ -755,7 +765,7 @@ public function test_can_self_enrol() { // Cannot enrol late. $course5 = $this->getDataGenerator()->create_course(); - $instance5 = $DB->get_record('enrol', array('courseid' => $course5->id, 'enrol' => 'wallet'), '*', MUST_EXIST); + $instance5 = $DB->get_record('enrol', ['courseid' => $course5->id, 'enrol' => 'wallet'], '*', MUST_EXIST); $instance5->customint6 = 1; $instance5->cost = 50; $instance5->enrolenddate = time() - 3 * DAYSECS; @@ -766,7 +776,7 @@ public function test_can_self_enrol() { // New enrols not allowed. $course6 = $this->getDataGenerator()->create_course(); - $instance6 = $DB->get_record('enrol', array('courseid' => $course6->id, 'enrol' => 'wallet'), '*', MUST_EXIST); + $instance6 = $DB->get_record('enrol', ['courseid' => $course6->id, 'enrol' => 'wallet'], '*', MUST_EXIST); $instance6->customint6 = 0; $instance6->cost = 50; $DB->update_record('enrol', $instance6); @@ -775,7 +785,7 @@ public function test_can_self_enrol() { // Max enrolments reached. $course7 = $this->getDataGenerator()->create_course(); - $instance7 = $DB->get_record('enrol', array('courseid' => $course7->id, 'enrol' => 'wallet'), '*', MUST_EXIST); + $instance7 = $DB->get_record('enrol', ['courseid' => $course7->id, 'enrol' => 'wallet'], '*', MUST_EXIST); $instance7->customint6 = 1; $instance7->customint3 = 2; $instance7->cost = 50; @@ -790,7 +800,7 @@ public function test_can_self_enrol() { // Check the restrictions upon other course enrollment. $course8 = $this->getDataGenerator()->create_course(['fullname' => 'xcourse8']); $course9 = $this->getDataGenerator()->create_course(); - $instance9 = $DB->get_record('enrol', array('courseid' => $course9->id, 'enrol' => 'wallet'), '*', MUST_EXIST); + $instance9 = $DB->get_record('enrol', ['courseid' => $course9->id, 'enrol' => 'wallet'], '*', MUST_EXIST); $instance9->customint6 = 1; $instance9->customchar3 = $course8->id; $instance9->customint7 = 1; @@ -804,7 +814,7 @@ public function test_can_self_enrol() { // Non valid cost. $course10 = $this->getDataGenerator()->create_course(); - $instance10 = $DB->get_record('enrol', array('courseid' => $course10->id, 'enrol' => 'wallet'), '*', MUST_EXIST); + $instance10 = $DB->get_record('enrol', ['courseid' => $course10->id, 'enrol' => 'wallet'], '*', MUST_EXIST); $instance10->customint6 = 1; $DB->update_record('enrol', $instance10); $walletplugin->update_status($instance10, ENROL_INSTANCE_ENABLED); @@ -815,7 +825,7 @@ public function test_can_self_enrol() { * Test get_welcome_email_contact(). * @covers ::get_welcome_email_contact() */ - public function test_get_welcome_email_contact() { + public function test_get_welcome_email_contact(): void { global $DB; self::resetAfterTest(true); @@ -870,7 +880,7 @@ public function test_get_welcome_email_contact() { * Test for getting user enrolment actions. * @covers ::get_user_enrolment_actions() */ - public function test_get_user_enrolment_actions() { + public function test_get_user_enrolment_actions(): void { global $CFG, $PAGE; $this->resetAfterTest(); @@ -919,7 +929,7 @@ public function test_get_user_enrolment_actions() { * * @covers ::get_cost_after_discount() */ - public function test_get_cost_after_discount() { + public function test_get_cost_after_discount(): void { global $DB; self::resetAfterTest(true); @@ -928,7 +938,7 @@ public function test_get_cost_after_discount() { $user1 = $this->getDataGenerator()->create_user(); $course1 = $this->getDataGenerator()->create_course(); - $instance1 = $DB->get_record('enrol', array('courseid' => $course1->id, 'enrol' => 'wallet'), '*', MUST_EXIST); + $instance1 = $DB->get_record('enrol', ['courseid' => $course1->id, 'enrol' => 'wallet'], '*', MUST_EXIST); $instance1->customint6 = 1; $instance1->cost = 200; $DB->update_record('enrol', $instance1); @@ -949,7 +959,7 @@ public function test_get_cost_after_discount() { $userfielddata = (object)[ 'userid' => $user1->id, 'fieldid' => $fieldid, - 'data' => 'free' + 'data' => 'free', ]; $userdataid = $DB->insert_record('user_info_data', $userfielddata); $costafter = $walletplugin->get_cost_after_discount($user1->id, $instance1); @@ -957,7 +967,7 @@ public function test_get_cost_after_discount() { $dataupdate = (object)[ 'id' => $userdataid, - 'data' => '20% discount' + 'data' => '20% discount', ]; $DB->update_record('user_info_data', $dataupdate); $costafter = $walletplugin->get_cost_after_discount($user1->id, $instance1); @@ -999,7 +1009,7 @@ public function test_get_cost_after_discount() { * Test that enrol_self deduct the users credit and that cashback program works. * @covers ::enrol_self() */ - public function test_enrol_self() { + public function test_enrol_self(): void { global $DB; self::resetAfterTest(true); @@ -1043,7 +1053,7 @@ public function test_enrol_self() { * @covers ::is_course_enrolment_restriction() * @return void */ - public function test_is_course_enrolment_restriction() { + public function test_is_course_enrolment_restriction(): void { global $DB; $this->resetAfterTest(); $wallet = enrol_get_plugin('wallet'); @@ -1143,7 +1153,7 @@ public function test_is_course_enrolment_restriction() { * test for hide_due_cheaper_instance function * @covers ::hide_due_cheaper_instance() */ - public function test_hide_due_cheaper_instance() { + public function test_hide_due_cheaper_instance(): void { global $DB; self::resetAfterTest(true); @@ -1213,7 +1223,7 @@ public function test_hide_due_cheaper_instance() { * @covers ::unenrol_user() * @return void */ - public function test_unenrol_user() { + public function test_unenrol_user(): void { global $DB; $this->resetAfterTest(); $course = $this->getDataGenerator()->create_course(); @@ -1327,7 +1337,7 @@ public function test_unenrol_user() { * @covers ::get_unenrolself_link() * @return void */ - public function test_get_unenrolself_link() { + public function test_get_unenrolself_link(): void { global $DB; $this->resetAfterTest(); $course = $this->getDataGenerator()->create_course(); @@ -1433,7 +1443,7 @@ public function test_get_unenrolself_link() { * @covers ::enrol_wallet_is_borrow_eligible() * @return void */ - public function test_enrol_wallet_is_borrow_eligible() { + public function test_enrol_wallet_is_borrow_eligible(): void { global $CFG, $DB; $this->resetAfterTest(); require_once("$CFG->dirroot/enrol/wallet/locallib.php"); diff --git a/tests/externallib_test.php b/tests/externallib_test.php index 110a93cf..b46add4e 100644 --- a/tests/externallib_test.php +++ b/tests/externallib_test.php @@ -38,7 +38,7 @@ class externallib_test extends externallib_advanced_testcase { * Test get_instance_info * @covers ::get_instance_info() */ - public function test_get_instance_info() { + public function test_get_instance_info(): void { global $DB, $CFG; require_once($CFG->dirroot . '/enrol/wallet/externallib.php'); @@ -50,7 +50,7 @@ public function test_get_instance_info() { // In this test we will add instances manually. $walletplugin->set_config('defaultenrol', 0); - $studentrole = $DB->get_record('role', array('shortname' => 'student')); + $studentrole = $DB->get_record('role', ['shortname' => 'student']); $this->assertNotEmpty($studentrole); $coursedata = new \stdClass(); @@ -58,18 +58,20 @@ public function test_get_instance_info() { $course = $this->getDataGenerator()->create_course($coursedata); // Add enrolment methods for course. - $instanceid1 = $walletplugin->add_instance($course, array('status' => ENROL_INSTANCE_ENABLED, + $instanceid1 = $walletplugin->add_instance($course, ['status' => ENROL_INSTANCE_ENABLED, 'name' => 'Test instance 1', 'customint6' => 1, 'cost' => 50, - 'roleid' => $studentrole->id)); - $instanceid2 = $walletplugin->add_instance($course, array('status' => ENROL_INSTANCE_DISABLED, + 'roleid' => $studentrole->id, + ]); + $instanceid2 = $walletplugin->add_instance($course, ['status' => ENROL_INSTANCE_DISABLED, 'customint6' => 1, 'cost' => 100, 'name' => 'Test instance 2', - 'roleid' => $studentrole->id)); + 'roleid' => $studentrole->id, + ]); - $enrolmentmethods = $DB->get_records('enrol', array('courseid' => $course->id, 'status' => ENROL_INSTANCE_ENABLED)); + $enrolmentmethods = $DB->get_records('enrol', ['courseid' => $course->id, 'status' => ENROL_INSTANCE_ENABLED]); $this->assertCount(2, $enrolmentmethods); $this->setAdminUser(); @@ -110,7 +112,7 @@ public function test_get_instance_info() { $this->assertTrue($instanceinfo1['status']); // Enable the instance. - $instance2 = $DB->get_record('enrol', array('id' => $instanceid2), '*', MUST_EXIST); + $instance2 = $DB->get_record('enrol', ['id' => $instanceid2], '*', MUST_EXIST); $walletplugin->update_status($instance2, ENROL_INSTANCE_ENABLED); $instanceinfo2 = enrol_wallet_external::get_instance_info($instanceid2); $instanceinfo2 = \external_api::clean_returnvalue(enrol_wallet_external::get_instance_info_returns(), $instanceinfo2); @@ -121,7 +123,7 @@ public function test_get_instance_info() { * Test enrol_user * @covers ::enrol_user() */ - public function test_enrol_user() { + public function test_enrol_user(): void { global $DB, $CFG; require_once($CFG->dirroot . '/enrol/wallet/externallib.php'); @@ -143,19 +145,21 @@ public function test_enrol_user() { $context1 = \context_course::instance($course1->id); $context2 = \context_course::instance($course2->id); - $studentrole = $DB->get_record('role', array('shortname' => 'student')); - $instance1id = $walletplugin->add_instance($course1, array('status' => ENROL_INSTANCE_ENABLED, + $studentrole = $DB->get_record('role', ['shortname' => 'student']); + $instance1id = $walletplugin->add_instance($course1, ['status' => ENROL_INSTANCE_ENABLED, 'name' => 'Test instance 1', 'customint6' => 1, 'cost' => 50, - 'roleid' => $studentrole->id)); - $instance2id = $walletplugin->add_instance($course2, array('status' => ENROL_INSTANCE_DISABLED, + 'roleid' => $studentrole->id, + ]); + $instance2id = $walletplugin->add_instance($course2, ['status' => ENROL_INSTANCE_DISABLED, 'customint6' => 1, 'name' => 'Test instance 2', 'cost' => 200, - 'roleid' => $studentrole->id)); - $instance1 = $DB->get_record('enrol', array('id' => $instance1id), '*', MUST_EXIST); - $instance2 = $DB->get_record('enrol', array('id' => $instance2id), '*', MUST_EXIST); + 'roleid' => $studentrole->id, + ]); + $instance1 = $DB->get_record('enrol', ['id' => $instance1id], '*', MUST_EXIST); + $instance2 = $DB->get_record('enrol', ['id' => $instance2id], '*', MUST_EXIST); $this->setUser($user1); @@ -164,7 +168,7 @@ public function test_enrol_user() { $result = \external_api::clean_returnvalue(enrol_wallet_external::enrol_user_returns(), $result); $this->assertTrue($result['status']); - $this->assertEquals(1, $DB->count_records('user_enrolments', array('enrolid' => $instance1->id))); + $this->assertEquals(1, $DB->count_records('user_enrolments', ['enrolid' => $instance1->id])); $this->assertTrue(is_enrolled($context1, $user1)); $balance = transactions::get_user_balance($user1->id); $this->assertEquals(50, $balance); diff --git a/tests/notifications_test.php b/tests/notifications_test.php index 5c20ce1b..235fc8ed 100644 --- a/tests/notifications_test.php +++ b/tests/notifications_test.php @@ -36,8 +36,9 @@ class notifications_test extends \advanced_testcase { /** * Test transaction_notifications * @covers ::transaction_notify() + * @return void */ - public function test_transaction_notifications() { + public function test_transaction_notifications(): void { $this->resetAfterTest(); $this->preventResetByRollback(); diff --git a/tests/observer_test.php b/tests/observer_test.php index 651e4bb0..c2089d26 100644 --- a/tests/observer_test.php +++ b/tests/observer_test.php @@ -42,7 +42,7 @@ class observer_test extends \advanced_testcase { * Test event observer completion awards. * @covers ::wallet_completion_awards */ - public function test_wallet_completion_awards() { + public function test_wallet_completion_awards(): void { global $DB, $CFG; $this->resetAfterTest(); set_config('awardssite', 1, 'enrol_wallet'); @@ -149,7 +149,7 @@ public function course_completion_trigger($cm, $user, $course, $grade) { $this->assertEquals(COMPLETION_COMPLETE, $completioninfo->internal_get_state($cm, $user->id, null)); $this->setAdminUser(); - $ccompletion = new \completion_completion(array('course' => $course->id, 'userid' => $user->id)); + $ccompletion = new \completion_completion(['course' => $course->id, 'userid' => $user->id]); // Mark course as complete. $ccompletion->mark_complete(); @@ -158,7 +158,7 @@ public function course_completion_trigger($cm, $user, $course, $grade) { * Testing event observer gifting new users. * @covers ::wallet_gifting_new_user() */ - public function test_wallet_gifting_new_user() { + public function test_wallet_gifting_new_user(): void { $this->resetAfterTest(); $walletplugin = enrol_get_plugin('wallet'); @@ -186,7 +186,7 @@ public function test_wallet_gifting_new_user() { * @covers ::conditional_discount_charging() * @return void */ - public function test_conditional_discount_charging() { + public function test_conditional_discount_charging(): void { global $DB; $this->resetAfterTest(); @@ -269,7 +269,7 @@ public function test_conditional_discount_charging() { * @covers ::release_referral_gift() * @return void */ - public function test_release_referral_gift() { + public function test_release_referral_gift(): void { global $DB, $CFG; $this->resetAfterTest(); require_once("$CFG->libdir/authlib.php"); diff --git a/tests/payment/service_provider_test.php b/tests/payment/service_provider_test.php index 62b64186..2bf884c2 100644 --- a/tests/payment/service_provider_test.php +++ b/tests/payment/service_provider_test.php @@ -35,8 +35,9 @@ class service_provider_test extends \advanced_testcase { * For payment area walletenrol, which enrol user into the course after payment. * * @covers ::get_payable() + * @return void */ - public function test_get_payable_walletenrol() { + public function test_get_payable_walletenrol(): void { global $DB; $this->resetAfterTest(); if (class_exists('\core_payment\helper')) { @@ -68,8 +69,9 @@ public function test_get_payable_walletenrol() { * For payment area wallettopup, which topping up the wallet after payment. * * @covers ::get_payable() + * @return void */ - public function test_get_payable_wallettopup() { + public function test_get_payable_wallettopup(): void { global $DB; $this->resetAfterTest(); if (class_exists('\core_payment\helper')) { @@ -94,7 +96,7 @@ public function test_get_payable_wallettopup() { * * @covers ::get_success_url() */ - public function test_get_success_url_walletenrol() { + public function test_get_success_url_walletenrol(): void { global $CFG, $DB; $this->resetAfterTest(); if (class_exists('\core_payment\helper')) { @@ -128,7 +130,7 @@ public function test_get_success_url_walletenrol() { * * @covers ::get_success_url() */ - public function test_get_success_url_wallettopup() { + public function test_get_success_url_wallettopup(): void { global $CFG, $DB; $this->resetAfterTest(); if (class_exists('\core_payment\helper')) { @@ -153,8 +155,9 @@ public function test_get_success_url_wallettopup() { * For payment area walletenrol, which enrol user into the course after payment. * * @covers ::deliver_order() + * @return void */ - public function test_deliver_order_walletenrol() { + public function test_deliver_order_walletenrol(): void { global $DB; $this->resetAfterTest(); $this->preventResetByRollback(); @@ -183,7 +186,7 @@ public function test_deliver_order_walletenrol() { $paymentid = $generator->get_plugin_generator('core_payment')->create_payment([ 'accountid' => $account->get('id'), 'amount' => 10, - 'userid' => $user->id + 'userid' => $user->id, ]); service_provider::deliver_order('walletenrol', $id, $paymentid, $user->id); @@ -196,8 +199,9 @@ public function test_deliver_order_walletenrol() { * For payment area wallettopup, which topping up the wallet after payment. * * @covers ::deliver_order() + * @return void */ - public function test_deliver_order_wallettopup() { + public function test_deliver_order_wallettopup(): void { global $DB; $this->resetAfterTest(); $this->preventResetByRollback(); @@ -217,7 +221,7 @@ public function test_deliver_order_wallettopup() { $paymentid = $generator->get_plugin_generator('core_payment')->create_payment([ 'accountid' => $account->get('id'), 'amount' => 250, - 'userid' => $user->id + 'userid' => $user->id, ]); service_provider::deliver_order('wallettopup', $id, $paymentid, $user->id); diff --git a/tests/transactions_test.php b/tests/transactions_test.php index 30c65d62..81f5f498 100644 --- a/tests/transactions_test.php +++ b/tests/transactions_test.php @@ -59,8 +59,9 @@ public function setUp(): void { * @covers ::payment_topup() * @covers ::debit() * @covers ::get_user_balance() + * @return void */ - public function test_credit_debit() { + public function test_credit_debit(): void { global $DB; $this->resetAfterTest(); $this->preventResetByRollback(); @@ -157,8 +158,9 @@ public function test_credit_debit() { * * @covers ::get_coupon_value() * @covers ::mark_coupon_used() + * @return void */ - public function test_get_coupon_value() { + public function test_get_coupon_value(): void { global $DB; $this->resetAfterTest(); $this->preventResetByRollback(); // Messaging does not like transactions... @@ -202,7 +204,7 @@ public function test_get_coupon_value() { * @covers ::validate_coupon * @return void */ - public function test_validate_coupon() { + public function test_validate_coupon(): void { global $DB; $this->resetAfterTest(); diff --git a/tests/turn_non_refundable_test.php b/tests/turn_non_refundable_test.php index 154da0f3..2a218291 100644 --- a/tests/turn_non_refundable_test.php +++ b/tests/turn_non_refundable_test.php @@ -37,8 +37,9 @@ class turn_non_refundable_test extends \advanced_testcase { /** * Test adhoc task turn_non_refundable. * @covers \turn_non_refundable + * @return void */ - public function test_turn_non_refundable() { + public function test_turn_non_refundable(): void { $this->resetAfterTest(); $user = $this->getDataGenerator()->create_user(); @@ -111,7 +112,7 @@ public function test_turn_non_refundable() { * @covers ::check_transform_validation() * @return void */ - public function test_check_transform_validation() { + public function test_check_transform_validation(): void { $this->resetAfterTest(); $user = $this->getDataGenerator()->create_user(); diff --git a/version.php b/version.php index c2938392..f564f662 100644 --- a/version.php +++ b/version.php @@ -30,5 +30,5 @@ $plugin->release = '4.0.0'; $plugin->maturity = MATURITY_STABLE; $plugin->dependencies = [ - 'enrol_manual' => ANY_VERSION + 'enrol_manual' => ANY_VERSION, ]; diff --git a/wplogin.php b/wplogin.php index 5578dd11..523d841c 100644 --- a/wplogin.php +++ b/wplogin.php @@ -27,16 +27,21 @@ $userid = required_param('userid', PARAM_INT); $action = required_param('action', PARAM_TEXT); -$wantsurl = optional_param('wantsurl', '', PARAM_URL); +$wantsurl = optional_param('wantsurl', null, PARAM_URL); $newredirect = optional_param('redirect', '', PARAM_URL); if ($action == 'login') { require_login(); + global $USER; - $redirect = core_login_get_return_url(); + if ($USER->id != $userid || isguestuser()) { + throw new moodle_exception('invalidoperation'); + } + + $redirect = $wantsurl ?? core_login_get_return_url(); $wordpress = new \enrol_wallet\wordpress; - $wordpress->login_logout_user_to_wordpress($userid, 'login', $redirect); + $wordpress->login_logout_user_to_wordpress($USER->id, 'login', $redirect); } else if ($action == 'logout') { global $redirect;