Exemplo n.º 1
0
 /**
 * The other half to print_entry, this checks the form data
 *
 * This function checks that the user has completed the task on the
 * enrolment entry page and then enrolls them.
 *
 * @param    form    the form data submitted, as an object
 * @param    course  the current course, as an object
 */
 function check_entry($form, $course)
 {
     global $CFG, $USER, $SESSION, $THEME;
     if (empty($form->password)) {
         $form->password = '';
     }
     if (empty($course->password)) {
         // do not allow entry when no course password set
         // automatic login when manual primary, no login when secondary at all!!
         error('illegal enrolment attempted');
     }
     $groupid = $this->check_group_entry($course->id, $form->password);
     if (stripslashes($form->password) == $course->password or $groupid !== false) {
         if (isguestuser()) {
             // only real user guest, do not use this for users with guest role
             $USER->enrolkey[$course->id] = true;
             add_to_log($course->id, 'course', 'guest', 'view.php?id=' . $course->id, getremoteaddr());
         } else {
             /// Update or add new enrolment
             if (enrol_into_course($course, $USER, 'manual')) {
                 // force a refresh of mycourses
                 unset($USER->mycourses);
                 if ($groupid !== false) {
                     if (!groups_add_member($groupid, $USER->id)) {
                         print_error('couldnotassigngroup');
                     }
                 }
             } else {
                 print_error('couldnotassignrole');
             }
         }
         if ($SESSION->wantsurl) {
             $destination = $SESSION->wantsurl;
             unset($SESSION->wantsurl);
         } else {
             $destination = "{$CFG->wwwroot}/course/view.php?id={$course->id}";
         }
         redirect($destination);
     } else {
         if (!isset($CFG->enrol_manual_showhint) or $CFG->enrol_manual_showhint) {
             $this->errormsg = get_string('enrolmentkeyhint', '', substr($course->password, 0, 1));
         } else {
             $this->errormsg = get_string('enrolmentkeyerror', 'enrol_manual');
         }
     }
 }
Exemplo n.º 2
0
}
echo "<br> Context id is {$context->id}";
if (!($user = get_record('user', 'username', $username))) {
    echo 'The username ' . $username . ' is invalid';
    error("That's an invalid username");
    exit;
}
echo "<br> User is {$user->firstname} {$user->lastname}";
// If user wasn't enrolled, enrol now. Ignore otherwise.
if ($role = get_record('role', 'name', 'Student')) {
    // if (($role = get_default_course_role($course))) {
    echo "<br> The role description is {$role->description}";
    echo "<br> Calling user_has_role_assignment(\$user->id, \$role->id, \$context->id) with user_has_role_assignment({$user->id}, {$role->id}, {$context->id})";
    if (!user_has_role_assignment($user->id, $role->id, $context->id)) {
        echo "<br> User is not enroled in this course";
        if (!enrol_into_course($course, $user, 'manual')) {
            print_error('couldnotassignrole');
            echo "<br> User could NOT be enrolled into the course";
            error("User could NOT be enrolled into the course");
            exit;
        }
        echo "<br> User was just enrolled into the course";
        // force a refresh of mycourses
        unset($user->mycourses);
        if (!empty($SESSION->wantsurl)) {
            $destination = $SESSION->wantsurl;
            unset($SESSION->wantsurl);
        } else {
            $destination = "{$CFG->wwwroot}/course/view.php?id={$course->id}";
        }
        echo "<br> \$destination is set to {$destination}";
Exemplo n.º 3
0
 /**
  * The user submitted credit card form.
  *
  * @param object $form Form parameters
  * @param object $course Course info
  * @access private
  */
 function cc_submit($form, $course)
 {
     global $CFG, $USER, $SESSION;
     require_once 'authorizenetlib.php';
     prevent_double_paid($course);
     $useripno = getremoteaddr();
     $curcost = get_course_cost($course);
     $exp_date = sprintf("%02d", $form->ccexpiremm) . $form->ccexpireyyyy;
     // NEW CC ORDER
     $timenow = time();
     $order = new stdClass();
     $order->paymentmethod = AN_METHOD_CC;
     $order->refundinfo = substr($form->cc, -4);
     $order->ccname = $form->firstname . " " . $form->lastname;
     $order->courseid = $course->id;
     $order->userid = $USER->id;
     $order->status = AN_STATUS_NONE;
     // it will be changed...
     $order->settletime = 0;
     // cron changes this.
     $order->transid = 0;
     // Transaction Id
     $order->timecreated = $timenow;
     $order->amount = $curcost['cost'];
     $order->currency = $curcost['currency'];
     $order->id = insert_record("enrol_authorize", $order);
     if (!$order->id) {
         email_to_admin("Error while trying to insert new data", $order);
         return "Insert record error. Admin has been notified!";
     }
     $extra = new stdClass();
     $extra->x_card_num = $form->cc;
     $extra->x_card_code = $form->cvv;
     $extra->x_exp_date = $exp_date;
     $extra->x_currency_code = $curcost['currency'];
     $extra->x_amount = $curcost['cost'];
     $extra->x_first_name = $form->firstname;
     $extra->x_last_name = $form->lastname;
     $extra->x_country = $form->cccountry;
     $extra->x_address = $form->ccaddress;
     $extra->x_state = $form->ccstate;
     $extra->x_city = $form->cccity;
     $extra->x_zip = $form->cczip;
     $extra->x_invoice_num = $order->id;
     $extra->x_description = $course->shortname;
     $extra->x_cust_id = $USER->id;
     $extra->x_email = $USER->email;
     $extra->x_customer_ip = $useripno;
     $extra->x_email_customer = empty($CFG->enrol_mailstudents) ? 'FALSE' : 'TRUE';
     $extra->x_phone = '';
     $extra->x_fax = '';
     if (!empty($CFG->an_authcode) && !empty($form->ccauthcode)) {
         $action = AN_ACTION_CAPTURE_ONLY;
         $extra->x_auth_code = $form->ccauthcode;
     } elseif (!empty($CFG->an_review)) {
         $action = AN_ACTION_AUTH_ONLY;
     } else {
         $action = AN_ACTION_AUTH_CAPTURE;
     }
     $message = '';
     if (AN_APPROVED != authorize_action($order, $message, $extra, $action, $form->cctype)) {
         email_to_admin($message, $order);
         return $message;
     }
     $SESSION->ccpaid = 1;
     // security check: don't duplicate payment
     if (AN_ACTION_AUTH_ONLY == $action) {
         // review enabled, inform payment managers and redirect the user who have paid to main page.
         $a = new stdClass();
         $a->url = "{$CFG->wwwroot}/enrol/authorize/index.php?order={$order->id}";
         $a->orderid = $order->id;
         $a->transid = $order->transid;
         $a->amount = "{$order->currency} {$order->amount}";
         $a->expireon = userdate(authorize_getsettletime($timenow + 30 * 3600 * 24));
         $a->captureon = userdate(authorize_getsettletime($timenow + intval($CFG->an_capture_day) * 3600 * 24));
         $a->course = $course->fullname;
         $a->user = fullname($USER);
         $a->acstatus = $CFG->an_capture_day > 0 ? get_string('yes') : get_string('no');
         $emailmessage = get_string('adminneworder', 'enrol_authorize', $a);
         $a = new stdClass();
         $a->course = $course->shortname;
         $a->orderid = $order->id;
         $emailsubject = get_string('adminnewordersubject', 'enrol_authorize', $a);
         $context = get_context_instance(CONTEXT_COURSE, $course->id);
         if ($paymentmanagers = get_users_by_capability($context, 'enrol/authorize:managepayments')) {
             foreach ($paymentmanagers as $paymentmanager) {
                 email_to_user($paymentmanager, $USER, $emailsubject, $emailmessage);
             }
         }
         redirect($CFG->wwwroot, get_string("reviewnotify", "enrol_authorize"), '30');
         return;
     }
     // Credit card captured, ENROL student now...
     if (enrol_into_course($course, $USER, 'authorize')) {
         if (!empty($CFG->enrol_mailstudents)) {
             send_welcome_messages($order->id);
         }
         if (!empty($CFG->enrol_mailteachers)) {
             $context = get_context_instance(CONTEXT_COURSE, $course->id);
             $paymentmanagers = get_users_by_capability($context, 'enrol/authorize:managepayments', '', '', '0', '1');
             $paymentmanager = array_shift($paymentmanagers);
             $a = new stdClass();
             $a->course = "{$course->fullname}";
             $a->user = fullname($USER);
             email_to_user($paymentmanager, $USER, get_string("enrolmentnew", '', format_string($course->shortname)), get_string('enrolmentnewuser', '', $a));
         }
         if (!empty($CFG->enrol_mailadmins)) {
             $a = new stdClass();
             $a->course = "{$course->fullname}";
             $a->user = fullname($USER);
             $admins = get_admins();
             foreach ($admins as $admin) {
                 email_to_user($admin, $USER, get_string("enrolmentnew", '', format_string($course->shortname)), get_string('enrolmentnewuser', '', $a));
             }
         }
     } else {
         email_to_admin("Error while trying to enrol " . fullname($USER) . " in '{$course->fullname}'", $order);
     }
     if ($SESSION->wantsurl) {
         $destination = $SESSION->wantsurl;
         unset($SESSION->wantsurl);
     } else {
         $destination = "{$CFG->wwwroot}/course/view.php?id={$course->id}";
     }
     load_all_capabilities();
     redirect($destination, get_string('paymentthanks', 'moodle', $course->fullname), 10);
 }
Exemplo n.º 4
0
    }
} else {
    redirect($CFG->wwwroot . '/index.php');
}
$id = required_param('id', PARAM_INT);
// Masoud Sadjadi: PARAM_ALPHANUM changed to PARAM_RAW to support emails being passed as user names.
// $username     = required_param('username', PARAM_ALPHANUM);
$username = required_param('username', PARAM_RAW);
$loginasguest = optional_param('loginasguest', 0, PARAM_BOOL);
// hmm, is this still needed?
if (!isloggedin()) {
    // do not use require_login here because we are usually comming from it
    redirect(get_login_url());
}
if (!($course = get_record('course', 'id', $id))) {
    print_error("That's an invalid course id");
}
if (!($context = get_context_instance(CONTEXT_COURSE, $course->id))) {
    print_error("That's an invalid course id");
}
if (!($USER = get_record('user', 'username', $username))) {
    print_error("That's an invalid username");
}
/// Users can't enroll to site course
if ($course->id != SITEID) {
    if (!enrol_into_course($course, $USER, 'auto')) {
        print_error('couldnotassignrole');
    } else {
        echo "Enrolled - " . $username;
    }
}
Exemplo n.º 5
0
             // if the plugin auto-opens the course, then find the course this cohort enrols for and set it as the opener link
             if (get_config('auth/wp2moodle', 'autoopen') == 'yes') {
                 if ($enrolrow = $DB->get_record('enrol', array('enrol' => 'cohort', 'customint1' => $cohortrow->id, 'status' => 0))) {
                     $SESSION->wantsurl = new moodle_url('/course/view.php', array('id' => $enrolrow->courseid));
                 }
             }
         }
     }
 }
 // also optionally find a groupid we sent in, enrol this user in that group, and optionally open the course
 if (!empty($group)) {
     $ids = explode(',', $group);
     foreach ($ids as $group) {
         if ($DB->record_exists('groups', array('idnumber' => $group))) {
             $grouprow = $DB->get_record('groups', array('idnumber' => $group));
             enrol_into_course($grouprow->courseid, $user->id);
             if (!$DB->record_exists('groups_members', array('groupid' => $grouprow->id, 'userid' => $user->id))) {
                 // internally triggers groups_member_added event
                 groups_add_member($grouprow->id, $user->id);
                 //  not a component ,'enrol_wp2moodle');
             }
             // if the plugin auto-opens the course, then find the course this group is for and set it as the opener link
             if (get_config('auth/wp2moodle', 'autoopen') == 'yes') {
                 $SESSION->wantsurl = new moodle_url('/course/view.php', array('id' => $grouprow->courseid));
             }
         }
     }
 }
 // also optionally find a courseid we sent in, enrol this user in that course
 if (!empty($course)) {
     // find in table roles, record with shortname = student
Exemplo n.º 6
0
 if ((double) $course->cost < 0) {
     $cost = (double) $CFG->enrol_cost;
 } else {
     $cost = (double) $course->cost;
 }
 if ($data->payment_gross < $cost) {
     $cost = format_float($cost, 2);
     email_paypal_error_to_admin("Amount paid is not enough ({$data->payment_gross} < {$cost}))", $data);
     die;
 }
 // ALL CLEAR !
 if (!insert_record("enrol_paypal", addslashes_object($data))) {
     // Insert a transaction record
     email_paypal_error_to_admin("Error while trying to insert valid transaction", $data);
 }
 if (!enrol_into_course($course, $user, 'paypal')) {
     email_paypal_error_to_admin("Error while trying to enrol " . fullname($user) . " in '{$course->fullname}'", $data);
     die;
 } else {
     $teacher = get_teacher($course->id);
     if (!empty($CFG->enrol_mailstudents)) {
         $a->coursename = $course->fullname;
         $a->profileurl = "{$CFG->wwwroot}/user/view.php?id={$user->id}";
         email_to_user($user, $teacher, get_string("enrolmentnew", '', $course->shortname), get_string('welcometocoursetext', '', $a));
     }
     if (!empty($CFG->enrol_mailteachers)) {
         $a->course = $course->fullname;
         $a->user = fullname($user);
         email_to_user($teacher, $user, get_string("enrolmentnew", '', $course->shortname), get_string('enrolmentnewuser', '', $a));
     }
     if (!empty($CFG->enrol_mailadmins)) {
Exemplo n.º 7
0
require "../../config.php";
// Allow access only to admin
require_capability('moodle/legacy:admin', get_context_instance(CONTEXT_SYSTEM), NULL, false);
// Get mandatory params
$cid = required_param('cid', PARAM_INT);
// course
$uid = required_param('uid', PARAM_INT);
// user
$action = required_param('action', PARAM_ACTION);
// enrol OR delete
$course = get_record("course", "id", $cid);
$user = get_record("user", "id", $uid);
if ($action == 'delete') {
    delete_records('enrol_moderated', 'userid', $uid, 'courseid', $cid);
    // Send email to student
    $a->site = $SITE->shortname;
    $a->course = $course->shortname;
    $subject = get_string('applicationsubject', 'enrol_moderated', $a);
    $body = get_string('applicationbodyrejected', 'enrol_moderated');
    email_to_user($user, $SITE->shortname, $subject, $body);
    redirect($CFG->wwwroot . '/enrol/moderated/show_requests.php', get_string('applicationrejected', 'enrol_moderated'), 3);
}
if ($action == 'enrol') {
    if (!enrol_into_course($course, $user, 'moderated')) {
        print_error('couldnotassignrole');
    }
    delete_records('enrol_moderated', 'userid', $uid, 'courseid', $cid);
    // No needo to send email because enrol_into_course() sends it.
    redirect($CFG->wwwroot . '/enrol/moderated/show_requests.php', get_string('applicationaproved', 'enrol_moderated'), 3);
}
Exemplo n.º 8
0
 /**
  * Enrols user to course with the default role
  *
  * @param string $username   The username of the remote use
  * @param int    $courseid   The id of the local course
  * @return bool              Whether the enrolment has been successful
  */
 function enrol_user($user, $courseid)
 {
     global $MNET, $MNET_REMOTE_CLIENT;
     $userrecord = get_record('user', 'username', addslashes($user['username']), 'mnethostid', $MNET_REMOTE_CLIENT->id);
     if ($userrecord == false) {
         // We should at least be checking that we allow the remote
         // site to create users
         // TODO: more rigour here thanks!
         $userrecord = new stdClass();
         $userrecord->username = addslashes($user['username']);
         $userrecord->email = addslashes($user['email']);
         $userrecord->firstname = addslashes($user['firstname']);
         $userrecord->lastname = addslashes($user['lastname']);
         $userrecord->mnethostid = $MNET_REMOTE_CLIENT->id;
         if ($userrecord->id = insert_record('user', $userrecord)) {
             $userrecord = get_record('user', 'id', $userrecord->id);
         } else {
             // TODO: Error out
             return false;
         }
     }
     if (!($course = get_record('course', 'id', $courseid))) {
         // TODO: Error out
         return false;
     }
     $courses = $this->available_courses();
     if (!empty($courses[$courseid])) {
         if (enrol_into_course($course, $userrecord, 'mnet')) {
             return true;
         }
     }
     return false;
 }
Exemplo n.º 9
0
     if (isguestuser()) {
         $is_guest = TRUE;
     }
 } else {
     if (function_exists(isguest)) {
         if (isguest()) {
             $is_guest = TRUE;
         }
     }
 }
 if ($is_guest) {
     $json_output["enrol"] = true;
 } else {
     require_once "{$CFG->dirroot}/enrol/manual/enrol.php";
     if (function_exists(enrol_into_course)) {
         if (enrol_into_course($course, $USER, 'manual')) {
             unset($USER->mycourses);
             $json_output["enrol"] = true;
         } else {
             $json_output["errors"][] = "Error enrolling student into course.";
         }
     } else {
         // For older versions of Moodle.
         $timestart = time();
         $timeend = $timestart + $course->enrolperiod;
         if (enrol_student($USER->id, $course->id, $timestart, $timeend, 'manual')) {
             $json_output["enrol"] = true;
             unset($USER->mycourses);
         } else {
             $json_output["errors"][] = "Error enrolling student into course.";
         }
Exemplo n.º 10
0
/**
 * authorize_print_order_details
 *
 * @param int $orderno
 */
function authorize_print_order_details($orderno)
{
    global $CFG, $USER;
    global $strs, $authstrs;
    $cmdcapture = optional_param(ORDER_CAPTURE, '', PARAM_ALPHA);
    $cmddelete = optional_param(ORDER_DELETE, '', PARAM_ALPHA);
    $cmdrefund = optional_param(ORDER_REFUND, '', PARAM_ALPHA);
    $cmdvoid = optional_param(ORDER_VOID, '', PARAM_ALPHA);
    $unenrol = optional_param('unenrol', 0, PARAM_BOOL);
    $confirm = optional_param('confirm', 0, PARAM_BOOL);
    $table = new stdClass();
    $table->width = '100%';
    $table->size = array('30%', '70%');
    $table->align = array('right', 'left');
    $order = get_record('enrol_authorize', 'id', $orderno);
    if (!$order) {
        notice("Order {$orderno} not found.", "index.php");
        return;
    }
    $course = get_record('course', 'id', $order->courseid);
    $coursecontext = get_context_instance(CONTEXT_COURSE, $course->id);
    if ($USER->id != $order->userid) {
        // Current user viewing someone else's order
        require_capability('enrol/authorize:managepayments', $coursecontext);
    }
    echo "<form action=\"index.php\" method=\"post\">\n";
    echo "<div>";
    echo "<input type=\"hidden\" name=\"order\" value=\"{$orderno}\" />\n";
    echo "<input type=\"hidden\" name=\"sesskey\" value=\"" . sesskey() . "\" />";
    $settled = authorize_settled($order);
    $status = authorize_get_status_action($order);
    $table->data[] = array("<b>{$authstrs->paymentmethod}:</b>", $order->paymentmethod == AN_METHOD_CC ? $authstrs->methodcc : $authstrs->methodecheck);
    $table->data[] = array("<b>{$authstrs->orderid}:</b>", $orderno);
    $table->data[] = array("<b>{$authstrs->transid}:</b>", $order->transid);
    $table->data[] = array("<b>{$authstrs->amount}:</b>", "{$order->currency} {$order->amount}");
    if (empty($cmdcapture) and empty($cmdrefund) and empty($cmdvoid) and empty($cmddelete)) {
        $color = authorize_get_status_color($status->status);
        $table->data[] = array("<b>{$strs->course}:</b>", format_string($course->shortname));
        $table->data[] = array("<b>{$strs->status}:</b>", "<font style='color:{$color}'>" . $authstrs->{$status->status} . "</font>");
        if ($order->paymentmethod == AN_METHOD_CC) {
            $table->data[] = array("<b>{$authstrs->nameoncard}:</b>", $order->ccname);
        } else {
            $table->data[] = array("<b>{$authstrs->echeckfirslasttname}:</b>", $order->ccname);
        }
        $table->data[] = array("<b>{$strs->time}:</b>", userdate($order->timecreated));
        $table->data[] = array("<b>{$authstrs->settlementdate}:</b>", $settled ? userdate($order->settletime) : $authstrs->notsettled);
    }
    $table->data[] = array("&nbsp;", "<hr size='1' />\n");
    if (!empty($cmdcapture) and confirm_sesskey()) {
        // CAPTURE
        if (!in_array(ORDER_CAPTURE, $status->actions)) {
            $a = new stdClass();
            $a->action = $authstrs->capture;
            print_error('youcantdo', 'enrol_authorize', '', $a);
        }
        if (empty($confirm)) {
            $strcaptureyes = get_string('captureyes', 'enrol_authorize');
            $table->data[] = array("<b>{$strs->confirm}:</b>", "{$strcaptureyes} <br />\n            <input type='hidden' name='confirm' value='1' /><input type='submit' name='" . ORDER_CAPTURE . "' value='{$authstrs->capture}' />\n            &nbsp;&nbsp;&nbsp;<a href='index.php?order={$orderno}'>{$strs->no}</a>");
        } else {
            $message = '';
            $extra = NULL;
            if (AN_APPROVED != authorize_action($order, $message, $extra, AN_ACTION_PRIOR_AUTH_CAPTURE)) {
                $table->data[] = array("<b><font color='red'>{$strs->error}:</font></b>", $message);
            } else {
                if (empty($CFG->an_test)) {
                    $user = get_record('user', 'id', $order->userid);
                    if (enrol_into_course($course, $user, 'authorize')) {
                        if (!empty($CFG->enrol_mailstudents)) {
                            send_welcome_messages($order->id);
                        }
                        redirect("index.php?order={$orderno}");
                    } else {
                        $table->data[] = array("<b><font color='red'>{$strs->error}:</font></b>", "Error while trying to enrol " . fullname($user) . " in '" . format_string($course->shortname) . "'");
                    }
                } else {
                    $table->data[] = array(get_string('testmode', 'enrol_authorize'), get_string('testwarning', 'enrol_authorize'));
                }
            }
        }
        print_table($table);
    } elseif (!empty($cmdrefund) and confirm_sesskey()) {
        // REFUND
        if (!in_array(ORDER_REFUND, $status->actions)) {
            $a = new stdClass();
            $a->action = $authstrs->refund;
            print_error('youcantdo', 'enrol_authorize', '', $a);
        }
        $refunded = 0.0;
        $sql = "SELECT SUM(amount) AS refunded FROM {$CFG->prefix}enrol_authorize_refunds " . "WHERE (orderid = '" . $orderno . "') AND (status = '" . AN_STATUS_CREDIT . "')";
        if ($refundval = get_field_sql($sql)) {
            $refunded = floatval($refundval);
        }
        $upto = round($order->amount - $refunded, 2);
        if ($upto <= 0) {
            error("Refunded to original amount.");
        } else {
            $amount = round(optional_param('amount', $upto), 2);
            if ($amount > $upto or empty($confirm)) {
                $a = new stdClass();
                $a->upto = $upto;
                $strcanbecredit = get_string('canbecredit', 'enrol_authorize', $a);
                $strhowmuch = get_string('howmuch', 'enrol_authorize');
                $cbunenrol = print_checkbox('unenrol', '1', !empty($unenrol), '', '', '', true);
                $table->data[] = array("<b>{$authstrs->unenrolstudent}</b>", $cbunenrol);
                $table->data[] = array("<b>{$strhowmuch}</b>", "<input type='hidden' name='confirm' value='1' />\n                     <input type='text' size='5' name='amount' value='{$amount}' />\n                     {$strcanbecredit}<br /><input type='submit' name='" . ORDER_REFUND . "' value='{$authstrs->refund}' />");
            } else {
                $extra = new stdClass();
                $extra->orderid = $orderno;
                $extra->amount = $amount;
                $message = '';
                $success = authorize_action($order, $message, $extra, AN_ACTION_CREDIT);
                if (AN_APPROVED == $success || AN_REVIEW == $success) {
                    if (empty($CFG->an_test)) {
                        if (empty($extra->id)) {
                            $table->data[] = array("<b><font color='red'>{$strs->error}:</font></b>", 'insert record error');
                        } else {
                            if (!empty($unenrol)) {
                                role_unassign(0, $order->userid, 0, $coursecontext->id);
                            }
                            redirect("index.php?order={$orderno}");
                        }
                    } else {
                        $table->data[] = array(get_string('testmode', 'enrol_authorize'), get_string('testwarning', 'enrol_authorize'));
                    }
                } else {
                    $table->data[] = array("<b><font color='red'>{$strs->error}:</font></b>", $message);
                }
            }
        }
        print_table($table);
    } elseif (!empty($cmdvoid) and confirm_sesskey()) {
        // VOID
        $suborderno = optional_param('suborder', 0, PARAM_INT);
        if (empty($suborderno)) {
            // cancel original transaction.
            if (!in_array(ORDER_VOID, $status->actions)) {
                $a = new stdClass();
                $a->action = $authstrs->void;
                print_error('youcantdo', 'enrol_authorize', '', $a);
            }
            if (empty($confirm)) {
                $strvoidyes = get_string('voidyes', 'enrol_authorize');
                $table->data[] = array("<b>{$strs->confirm}:</b>", "{$strvoidyes}<br /><input type='hidden' name='" . ORDER_VOID . "' value='y' />\n                     <input type='hidden' name='confirm' value='1' />\n                     <input type='submit' value='{$authstrs->void}' />\n                     &nbsp;&nbsp;&nbsp;&nbsp;<a href='index.php?order={$orderno}'>{$strs->no}</a>");
            } else {
                $extra = NULL;
                $message = '';
                if (AN_APPROVED == authorize_action($order, $message, $extra, AN_ACTION_VOID)) {
                    if (empty($CFG->an_test)) {
                        redirect("index.php?order={$orderno}");
                    } else {
                        $table->data[] = array(get_string('testmode', 'enrol_authorize'), get_string('testwarning', 'enrol_authorize'));
                    }
                } else {
                    $table->data[] = array("<b><font color='red'>{$strs->error}:</font></b>", $message);
                }
            }
        } else {
            // cancel refunded transaction
            $sql = "SELECT r.*, e.courseid, e.paymentmethod FROM {$CFG->prefix}enrol_authorize_refunds r " . "INNER JOIN {$CFG->prefix}enrol_authorize e ON r.orderid = e.id " . "WHERE r.id = '{$suborderno}' AND r.orderid = '{$orderno}' AND r.status = '" . AN_STATUS_CREDIT . "'";
            $suborder = get_record_sql($sql);
            if (!$suborder) {
                // not found
                error("Transaction can not be voided because of already been voided.");
            } else {
                $refundedstatus = authorize_get_status_action($suborder);
                if (!in_array(ORDER_VOID, $refundedstatus->actions)) {
                    $a = new stdClass();
                    $a->action = $authstrs->void;
                    print_error('youcantdo', 'enrol_authorize', '', $a);
                }
                unset($suborder->courseid);
                if (empty($confirm)) {
                    $a = new stdClass();
                    $a->transid = $suborder->transid;
                    $a->amount = $suborder->amount;
                    $strsubvoidyes = get_string('subvoidyes', 'enrol_authorize', $a);
                    $cbunenrol = print_checkbox('unenrol', '1', !empty($unenrol), '', '', '', true);
                    $table->data[] = array("<b>{$authstrs->unenrolstudent}</b>", $cbunenrol);
                    $table->data[] = array("<b>{$strs->confirm}:</b>", "{$strsubvoidyes}<br /><input type='hidden' name='" . ORDER_VOID . "' value='y' />\n                         <input type='hidden' name='confirm' value='1' />\n                         <input type='hidden' name='suborder' value='{$suborderno}' />\n                         <input type='submit' value='{$authstrs->void}' />\n                         &nbsp;&nbsp;&nbsp;&nbsp;<a href='index.php?order={$orderno}'>{$strs->no}</a>");
                } else {
                    $message = '';
                    $extra = NULL;
                    if (AN_APPROVED == authorize_action($suborder, $message, $extra, AN_ACTION_VOID)) {
                        if (empty($CFG->an_test)) {
                            if (!empty($unenrol)) {
                                role_unassign(0, $order->userid, 0, $coursecontext->id);
                            }
                            redirect("index.php?order={$orderno}");
                        } else {
                            $table->data[] = array(get_string('testmode', 'enrol_authorize'), get_string('testwarning', 'enrol_authorize'));
                        }
                    } else {
                        $table->data[] = array("<b><font color='red'>{$strs->error}:</font></b>", $message);
                    }
                }
            }
        }
        print_table($table);
    } elseif (!empty($cmddelete) and confirm_sesskey()) {
        // DELETE
        if (!in_array(ORDER_DELETE, $status->actions)) {
            $a = new stdClass();
            $a->action = $authstrs->delete;
            print_error('youcantdo', 'enrol_authorize', '', $a);
        }
        if (empty($confirm)) {
            $cbunenrol = print_checkbox('unenrol', '1', !empty($unenrol), '', '', '', true);
            $table->data[] = array("<b>{$authstrs->unenrolstudent}</b>", $cbunenrol);
            $table->data[] = array("<b>{$strs->confirm}:</b>", "<input type='hidden' name='" . ORDER_DELETE . "' value='y' />\n                 <input type='hidden' name='confirm' value='1' />\n                 <input type='submit' value='{$authstrs->delete}' />\n                 &nbsp;&nbsp;&nbsp;&nbsp;<a href='index.php?order={$orderno}'>{$strs->no}</a>");
        } else {
            if (!empty($unenrol)) {
                role_unassign(0, $order->userid, 0, $coursecontext->id);
            }
            delete_records('enrol_authorize', 'id', $orderno);
            redirect("index.php");
        }
        print_table($table);
    } else {
        // SHOW
        $actions = '';
        if (empty($status->actions)) {
            if ($order->paymentmethod == AN_METHOD_ECHECK && has_capability('enrol/authorize:uploadcsv', get_context_instance(CONTEXT_USER, $USER->id))) {
                $actions .= '<a href="uploadcsv.php">' . get_string('uploadcsv', 'enrol_authorize') . '</a>';
            } else {
                $actions .= $strs->none;
            }
        } else {
            foreach ($status->actions as $value) {
                $actions .= "<input type='submit' name='{$value}' value='{$authstrs->{$value}}' /> ";
            }
        }
        $table->data[] = array("<b>{$strs->action}</b>", $actions);
        print_table($table);
        if ($settled) {
            // show refunds.
            $t2 = new stdClass();
            $t2->size = array('45%', '15%', '20%', '10%', '10%');
            $t2->align = array('right', 'right', 'right', 'right', 'right');
            $t2->head = array($authstrs->settlementdate, $authstrs->transid, $strs->status, $strs->action, $authstrs->amount);
            $sql = "SELECT r.*, e.courseid, e.paymentmethod FROM {$CFG->prefix}enrol_authorize_refunds r " . "INNER JOIN {$CFG->prefix}enrol_authorize e ON r.orderid = e.id " . "WHERE r.orderid = '{$orderno}'";
            $refunds = get_records_sql($sql);
            if ($refunds) {
                $sumrefund = floatval(0.0);
                foreach ($refunds as $rf) {
                    $substatus = authorize_get_status_action($rf);
                    $subactions = '&nbsp;';
                    if (empty($substatus->actions)) {
                        $subactions .= $strs->none;
                    } else {
                        foreach ($substatus->actions as $vl) {
                            $subactions .= "<a href='index.php?{$vl}=y&amp;sesskey={$USER->sesskey}&amp;order={$orderno}&amp;suborder={$rf->id}'>{$authstrs->{$vl}}</a> ";
                        }
                    }
                    $sign = '';
                    $color = authorize_get_status_color($substatus->status);
                    if ($substatus->status == 'refunded' or $substatus->status == 'settled') {
                        $sign = '-';
                        $sumrefund += floatval($rf->amount);
                    }
                    $t2->data[] = array(userdate($rf->settletime), $rf->transid, "<font style='color:{$color}'>" . $authstrs->{$substatus->status} . "</font>", $subactions, format_float($sign . $rf->amount, 2));
                }
                $t2->data[] = array('', '', get_string('total'), $order->currency, format_float('-' . $sumrefund, 2));
            } else {
                $t2->data[] = array('', '', get_string('noreturns', 'enrol_authorize'), '', '');
            }
            echo "<h4>" . get_string('returns', 'enrol_authorize') . "</h4>\n";
            print_table($t2);
        }
    }
    echo '</div>';
    echo '</form>';
}
Exemplo n.º 11
0
 /**
  * The user submitted credit card form.
  *
  * @param object $form Form parameters
  * @param object $course Course info
  * @return string NULL if ok, error message otherwise.
  * @access private
  */
 private function cc_submit($form, $course)
 {
     global $CFG, $USER, $SESSION, $OUTPUT, $DB;
     prevent_double_paid($course);
     $useripno = getremoteaddr();
     $curcost = get_course_cost($course);
     $exp_date = sprintf("%02d", $form->ccexpiremm) . $form->ccexpireyyyy;
     // NEW CC ORDER
     $timenow = time();
     $order = new stdClass();
     $order->paymentmethod = AN_METHOD_CC;
     $order->refundinfo = substr($form->cc, -4);
     $order->ccname = $form->firstname . " " . $form->lastname;
     $order->courseid = $course->id;
     $order->userid = $USER->id;
     $order->status = AN_STATUS_NONE;
     // it will be changed...
     $order->settletime = 0;
     // cron changes this.
     $order->transid = 0;
     // Transaction Id
     $order->timecreated = $timenow;
     $order->amount = $curcost['cost'];
     $order->currency = $curcost['currency'];
     $order->id = $DB->insert_record("enrol_authorize", $order);
     if (!$order->id) {
         message_to_admin("Error while trying to insert new data", $order);
         return "Insert record error. Admin has been notified!";
     }
     $extra = new stdClass();
     $extra->x_card_num = $form->cc;
     $extra->x_card_code = $form->cvv;
     $extra->x_exp_date = $exp_date;
     $extra->x_currency_code = $curcost['currency'];
     $extra->x_amount = $curcost['cost'];
     $extra->x_first_name = $form->firstname;
     $extra->x_last_name = $form->lastname;
     $extra->x_country = $form->cccountry;
     $extra->x_address = $form->ccaddress;
     $extra->x_state = $form->ccstate;
     $extra->x_city = $form->cccity;
     $extra->x_zip = $form->cczip;
     $extra->x_invoice_num = $order->id;
     $extra->x_description = $course->shortname;
     $extra->x_cust_id = $USER->id;
     $extra->x_email = $USER->email;
     $extra->x_customer_ip = $useripno;
     $extra->x_email_customer = empty($CFG->enrol_mailstudents) ? 'FALSE' : 'TRUE';
     $extra->x_phone = '';
     $extra->x_fax = '';
     if (!empty($CFG->an_authcode) && !empty($form->ccauthcode)) {
         $action = AN_ACTION_CAPTURE_ONLY;
         $extra->x_auth_code = $form->ccauthcode;
     } elseif (!empty($CFG->an_review)) {
         $action = AN_ACTION_AUTH_ONLY;
     } else {
         $action = AN_ACTION_AUTH_CAPTURE;
     }
     $message = '';
     if (AN_APPROVED == AuthorizeNet::process($order, $message, $extra, $action, $form->cctype)) {
         $SESSION->ccpaid = 1;
         // security check: don't duplicate payment
         switch ($action) {
             // review enabled (authorize but capture: draw money but wait for settlement during 30 days)
             // the first step is to inform payment managers and to redirect the user to main page.
             // the next step is to accept/deny payment (AN_ACTION_PRIOR_AUTH_CAPTURE/VOID) within 30 days (payment management or scheduled-capture CRON)
             // unless you accept payment or enable auto-capture cron, the transaction is expired after 30 days and the user cannot enrol to the course during 30 days.
             // see also: admin/cron.php, $this->cron(), $CFG->an_capture_day...
             case AN_ACTION_AUTH_ONLY:
                 $a = new stdClass();
                 $a->url = "{$CFG->wwwroot}/enrol/authorize/index.php?order={$order->id}";
                 $a->orderid = $order->id;
                 $a->transid = $order->transid;
                 $a->amount = "{$order->currency} {$order->amount}";
                 $a->expireon = userdate(AuthorizeNet::getsettletime($timenow + 30 * 3600 * 24));
                 $a->captureon = userdate(AuthorizeNet::getsettletime($timenow + intval($CFG->an_capture_day) * 3600 * 24));
                 $a->course = $course->fullname;
                 $a->user = fullname($USER);
                 $a->acstatus = $CFG->an_capture_day > 0 ? get_string('yes') : get_string('no');
                 $emailmessage = get_string('adminneworder', 'enrol_authorize', $a);
                 $a = new stdClass();
                 $a->course = $course->shortname;
                 $a->orderid = $order->id;
                 $emailsubject = get_string('adminnewordersubject', 'enrol_authorize', $a);
                 $context = get_context_instance(CONTEXT_COURSE, $course->id);
                 if ($paymentmanagers = get_users_by_capability($context, 'enrol/authorize:managepayments')) {
                     foreach ($paymentmanagers as $paymentmanager) {
                         $eventdata = new object();
                         $eventdata->modulename = 'moodle';
                         $eventdata->userfrom = $USER;
                         $eventdata->userto = $paymentmanager;
                         $eventdata->subject = $emailsubject;
                         $eventdata->fullmessage = $emailmessage;
                         $eventdata->fullmessageformat = FORMAT_PLAIN;
                         $eventdata->fullmessagehtml = '';
                         $eventdata->smallmessage = '';
                         events_trigger('message_send', $eventdata);
                     }
                 }
                 redirect($CFG->wwwroot, get_string("reviewnotify", "enrol_authorize"), '30');
                 break;
             case AN_ACTION_CAPTURE_ONLY:
                 // auth code received via phone and the code accepted.
             // auth code received via phone and the code accepted.
             case AN_ACTION_AUTH_CAPTURE:
                 // Credit card captured, ENROL student now...
                 if (enrol_into_course($course, $USER, 'authorize')) {
                     if (!empty($CFG->enrol_mailstudents)) {
                         send_welcome_messages($order->id);
                     }
                     if (!empty($CFG->enrol_mailteachers)) {
                         $context = get_context_instance(CONTEXT_COURSE, $course->id);
                         $paymentmanagers = get_users_by_capability($context, 'enrol/authorize:managepayments', '', '', '0', '1');
                         $paymentmanager = array_shift($paymentmanagers);
                         $a = new stdClass();
                         $a->course = "{$course->fullname}";
                         $a->user = fullname($USER);
                         $eventdata = new object();
                         $eventdata->modulename = 'moodle';
                         $eventdata->userfrom = $USER;
                         $eventdata->userto = $paymentmanager;
                         $eventdata->subject = get_string("enrolmentnew", '', format_string($course->shortname));
                         $eventdata->fullmessage = get_string('enrolmentnewuser', '', $a);
                         $eventdata->fullmessageformat = FORMAT_PLAIN;
                         $eventdata->fullmessagehtml = '';
                         $eventdata->smallmessage = '';
                         events_trigger('message_send', $eventdata);
                     }
                     if (!empty($CFG->enrol_mailadmins)) {
                         $a = new stdClass();
                         $a->course = "{$course->fullname}";
                         $a->user = fullname($USER);
                         $admins = get_admins();
                         foreach ($admins as $admin) {
                             $eventdata = new object();
                             $eventdata->modulename = 'moodle';
                             $eventdata->userfrom = $USER;
                             $eventdata->userto = $admin;
                             $eventdata->subject = get_string("enrolmentnew", '', format_string($course->shortname));
                             $eventdata->fullmessage = get_string('enrolmentnewuser', '', $a);
                             $eventdata->fullmessageformat = FORMAT_PLAIN;
                             $eventdata->fullmessagehtml = '';
                             $eventdata->smallmessage = '';
                             events_trigger('message_send', $eventdata);
                         }
                     }
                 } else {
                     message_to_admin("Error while trying to enrol " . fullname($USER) . " in '{$course->fullname}'", $order);
                 }
                 load_all_capabilities();
                 echo $OUTPUT->box_start('generalbox notice');
                 echo '<p>' . get_string('paymentthanks', 'moodle', $course->fullname) . '</p>';
                 echo $OUTPUT->container_start('buttons');
                 echo $OUTPUT->button(html_form::make_button("{$CFG->wwwroot}/enrol/authorize/index.php", array('order' => $order->id), get_string('payments')));
                 echo $OUTPUT->button(html_form::make_button("{$CFG->wwwroot}/course/view.php", array('id' => $course->id), $course->fullname));
                 echo $OUTPUT->container_end();
                 echo $OUTPUT->box_end();
                 echo $OUTPUT->footer();
                 exit;
                 // break;
         }
         return NULL;
     } else {
         message_to_admin($message, $order);
         return $message;
     }
 }
Exemplo n.º 12
0
/**
 * authorize_print_order
 *
 * @param object $order
 */
function authorize_print_order($orderid)
{
    global $CFG, $USER, $DB, $OUTPUT, $PAGE;
    global $strs, $authstrs;
    $plugin = enrol_get_plugin('authorize');
    $an_test = $plugin->get_config('an_test');
    $do = optional_param('do', '', PARAM_ALPHA);
    $unenrol = optional_param('unenrol', 0, PARAM_BOOL);
    $confirm = optional_param('confirm', 0, PARAM_BOOL);
    if (!($order = $DB->get_record('enrol_authorize', array('id' => $orderid)))) {
        print_error('orderidnotfound', '', "{$CFG->wwwroot}/enrol/authorize/index.php", $orderid);
    }
    if (!($course = $DB->get_record('course', array('id' => $order->courseid)))) {
        print_error('invalidcourseid', '', "{$CFG->wwwroot}/enrol/authorize/index.php");
    }
    if (!($user = $DB->get_record('user', array('id' => $order->userid)))) {
        print_error('nousers', '', "{$CFG->wwwroot}/enrol/authorize/index.php");
    }
    $coursecontext = context_course::instance($course->id);
    if ($USER->id != $order->userid) {
        // Current user viewing someone else's order
        require_capability('enrol/authorize:managepayments', $coursecontext);
    }
    $settled = AuthorizeNet::settled($order);
    $statusandactions = authorize_get_status_action($order);
    $color = authorize_get_status_color($statusandactions->status);
    $buttons = '';
    if (empty($do)) {
        if (empty($statusandactions->actions)) {
            if (AN_METHOD_ECHECK == $order->paymentmethod && has_capability('enrol/authorize:uploadcsv', context_user::instance($USER->id))) {
                $buttons .= "<form method='get' action='uploadcsv.php'><div><input type='submit' value='" . get_string('uploadcsv', 'enrol_authorize') . "' /></div></form>";
            }
        } else {
            foreach ($statusandactions->actions as $val) {
                $buttons .= authorize_print_action_button($orderid, $val);
            }
        }
    }
    if (SITEID != $course->id) {
        $shortname = format_string($course->shortname, true, array('context' => $coursecontext));
        $PAGE->navbar->add($shortname, new moodle_url('/course/view.php', array('id' => $course->id)));
    }
    $PAGE->navbar->add($authstrs->paymentmanagement, 'index.php?course=' . $course->id);
    $PAGE->navbar->add($authstrs->orderid . ': ' . $orderid, 'index.php');
    $PAGE->set_course($course);
    $PAGE->set_title("{$course->shortname}: {$authstrs->paymentmanagement}");
    $PAGE->set_heading($authstrs->orderdetails);
    $PAGE->set_cacheable(false);
    $PAGE->set_button($buttons);
    echo $OUTPUT->header();
    $table = new html_table();
    $table->width = '100%';
    $table->size = array('30%', '70%');
    $table->align = array('right', 'left');
    if (AN_METHOD_CC == $order->paymentmethod) {
        $table->data[] = array("<b>{$authstrs->paymentmethod}:</b>", $authstrs->methodcc);
        $table->data[] = array("<b>{$authstrs->nameoncard}:</b>", $order->ccname . ' (<b><a href="' . $CFG->wwwroot . '/user/view.php?id=' . $user->id . '">' . fullname($user) . '</a></b>)');
        $table->data[] = array("<b>{$authstrs->cclastfour}:</b>", $order->refundinfo);
    } else {
        $table->data[] = array("<b>{$authstrs->paymentmethod}:</b>", $authstrs->methodecheck);
        $table->data[] = array("<b>{$authstrs->echeckfirslasttname}:</b>", $order->ccname . ' (<b><a href="' . $CFG->wwwroot . '/user/view.php?id=' . $user->id . '">' . fullname($user) . '</a></b>)');
        $table->data[] = array("<b>{$authstrs->isbusinesschecking}:</b>", $order->refundinfo == 1 ? $strs->yes : $strs->no);
    }
    $table->data[] = array("<b>{$authstrs->amount}:</b>", "{$order->currency} {$order->amount}");
    $table->data[] = array("<b>{$authstrs->transid}:</b>", $order->transid);
    $table->data[] = array("<b>{$strs->time}:</b>", userdate($order->timecreated));
    $table->data[] = array("<b>{$authstrs->settlementdate}:</b>", $settled ? userdate($order->settletime) : $authstrs->notsettled);
    $table->data[] = array("<b>{$strs->status}:</b>", "<b><font style='color:{$color}'>" . $authstrs->{$statusandactions->status} . "</font></b>");
    if (ORDER_CAPTURE == $do && in_array(ORDER_CAPTURE, $statusandactions->actions)) {
        if ($confirm && confirm_sesskey()) {
            $message = '';
            $extra = NULL;
            if (AN_APPROVED == AuthorizeNet::process($order, $message, $extra, AN_ACTION_PRIOR_AUTH_CAPTURE)) {
                if (empty($an_test)) {
                    if (enrol_into_course($course, $user, 'authorize')) {
                        if ($plugin->get_config('enrol_mailstudents')) {
                            send_welcome_messages($orderid);
                        }
                        redirect("{$CFG->wwwroot}/enrol/authorize/index.php?order={$orderid}");
                    } else {
                        $shortname = format_string($course->shortname, true, array('context' => $coursecontext));
                        redirect("{$CFG->wwwroot}/enrol/authorize/index.php?order={$orderid}", "Error while trying to enrol " . fullname($user) . " in '" . $shortname . "'", 20);
                    }
                } else {
                    redirect("{$CFG->wwwroot}/enrol/authorize/index.php?order={$orderid}", get_string('testwarning', 'enrol_authorize'), 10);
                }
            } else {
                redirect("{$CFG->wwwroot}/enrol/authorize/index.php?order={$orderid}", $message, 20);
            }
        }
        $table->data[] = array("<b>{$strs->confirm}:</b>", get_string('captureyes', 'enrol_authorize') . '<br />' . authorize_print_action_button($orderid, ORDER_CAPTURE, 0, true, false, $strs->no));
        echo html_writer::table($table);
    } elseif (ORDER_REFUND == $do && in_array(ORDER_REFUND, $statusandactions->actions)) {
        $refunded = 0.0;
        $sql = "SELECT SUM(amount) AS refunded\n                  FROM {enrol_authorize_refunds}\n                 WHERE (orderid = ?)\n                   AND (status = ?)";
        if ($refundval = $DB->get_field_sql($sql, array($orderid, AN_STATUS_CREDIT))) {
            $refunded = floatval($refundval);
        }
        $upto = round($order->amount - $refunded, 2);
        if ($upto <= 0) {
            print_error('refoundtoorigi', '', "{$CFG->wwwroot}/enrol/authorize/index.php?order={$orderid}", $order->amount);
        }
        $amount = round(optional_param('amount', $upto, PARAM_RAW), 2);
        if ($amount > $upto) {
            print_error('refoundto', '', "{$CFG->wwwroot}/enrol/authorize/index.php?order={$orderid}", $upto);
        }
        if ($confirm && confirm_sesskey()) {
            $extra = new stdClass();
            $extra->orderid = $orderid;
            $extra->amount = $amount;
            $message = '';
            $success = AuthorizeNet::process($order, $message, $extra, AN_ACTION_CREDIT);
            if (AN_APPROVED == $success || AN_REVIEW == $success) {
                if (empty($an_test)) {
                    if (empty($extra->id)) {
                        redirect("{$CFG->wwwroot}/enrol/authorize/index.php?order={$orderid}", "insert record error", 20);
                    } else {
                        if (!empty($unenrol)) {
                            $pinstance = $DB->get_record('enrol', array('id' => $order->instanceid));
                            $plugin->unenrol_user($pinstance, $order->userid);
                            //role_unassign_all(array('userid'=>$order->userid, 'contextid'=>$coursecontext->id, 'component'=>'enrol_authorize'), true, true);
                        }
                        redirect("{$CFG->wwwroot}/enrol/authorize/index.php?order={$orderid}");
                    }
                } else {
                    redirect("{$CFG->wwwroot}/enrol/authorize/index.php?order={$orderid}", get_string('testwarning', 'enrol_authorize'), 10);
                }
            } else {
                redirect("{$CFG->wwwroot}/enrol/authorize/index.php?order={$orderid}", $message, 20);
            }
        }
        $a = new stdClass();
        $a->upto = $upto;
        $extrahtml = get_string('howmuch', 'enrol_authorize') . ' <input type="text" size="5" name="amount" value="' . $amount . '" /> ' . get_string('canbecredit', 'enrol_authorize', $a) . '<br />';
        $table->data[] = array("<b>{$strs->confirm}:</b>", authorize_print_action_button($orderid, ORDER_REFUND, 0, true, $authstrs->unenrolstudent, $strs->no, $extrahtml));
        echo html_writer::table($table);
    } elseif (ORDER_DELETE == $do && in_array(ORDER_DELETE, $statusandactions->actions)) {
        if ($confirm && confirm_sesskey()) {
            if (!empty($unenrol)) {
                $pinstance = $DB->get_record('enrol', array('id' => $order->instanceid));
                $plugin->unenrol_user($pinstance, $order->userid);
                //role_unassign_all(array('userid'=>$order->userid, 'contextid'=>$coursecontext->id, 'component'=>'enrol_authorize'), true, true);
            }
            $DB->delete_records('enrol_authorize', array('id' => $orderid));
            redirect("{$CFG->wwwroot}/enrol/authorize/index.php");
        }
        $table->data[] = array("<b>{$strs->confirm}:</b>", authorize_print_action_button($orderid, ORDER_DELETE, 0, true, $authstrs->unenrolstudent, $strs->no));
        echo html_writer::table($table);
    } elseif (ORDER_VOID == $do) {
        // special case: cancel original or refunded transaction?
        $suborderid = optional_param('suborder', 0, PARAM_INT);
        if (empty($suborderid) && in_array(ORDER_VOID, $statusandactions->actions)) {
            // cancel original
            if ($confirm && confirm_sesskey()) {
                $extra = NULL;
                $message = '';
                if (AN_APPROVED == AuthorizeNet::process($order, $message, $extra, AN_ACTION_VOID)) {
                    if (empty($an_test)) {
                        redirect("{$CFG->wwwroot}/enrol/authorize/index.php?order={$orderid}");
                    } else {
                        redirect("{$CFG->wwwroot}/enrol/authorize/index.php?order={$orderid}", get_string('testwarning', 'enrol_authorize'), 10);
                    }
                } else {
                    redirect("{$CFG->wwwroot}/enrol/authorize/index.php?order={$orderid}", $message, 20);
                }
            }
            $table->data[] = array("<b>{$strs->confirm}:</b>", get_string('voidyes', 'enrol_authorize') . '<br />' . authorize_print_action_button($orderid, ORDER_VOID, 0, true, false, $strs->no));
            echo html_writer::table($table);
        } elseif (!empty($suborderid)) {
            // cancel refunded
            $sql = "SELECT r.*, e.courseid, e.paymentmethod\n                      FROM {enrol_authorize_refunds} r\n                INNER JOIN {enrol_authorize} e\n                        ON r.orderid = e.id\n                     WHERE r.id = ?\n                       AND r.orderid = ?\n                       AND r.status = ?";
            $suborder = $DB->get_record_sql($sql, array($suborderid, $orderid, AN_STATUS_CREDIT));
            if (!$suborder) {
                // not found
                print_error('transactionvoid', '', "{$CFG->wwwroot}/enrol/authorize/index.php?order={$orderid}");
            }
            $refundedstatus = authorize_get_status_action($suborder);
            unset($suborder->courseid);
            if (in_array(ORDER_VOID, $refundedstatus->actions)) {
                if ($confirm && confirm_sesskey()) {
                    $message = '';
                    $extra = NULL;
                    if (AN_APPROVED == AuthorizeNet::process($suborder, $message, $extra, AN_ACTION_VOID)) {
                        if (empty($an_test)) {
                            if (!empty($unenrol)) {
                                $pinstance = $DB->get_record('enrol', array('id' => $order->instanceid));
                                $plugin->unenrol_user($pinstance, $order->userid);
                                //role_unassign_all(array('userid'=>$order->userid, 'contextid'=>$coursecontext->id, 'component'=>'enrol_authorize'), true, true);
                            }
                            redirect("{$CFG->wwwroot}/enrol/authorize/index.php?order={$orderid}");
                        } else {
                            redirect("{$CFG->wwwroot}/enrol/authorize/index.php?order={$orderid}", get_string('testwarning', 'enrol_authorize'), 10);
                        }
                    } else {
                        redirect("{$CFG->wwwroot}/enrol/authorize/index.php?order={$orderid}", $message, 20);
                    }
                }
                $a = new stdClass();
                $a->transid = $suborder->transid;
                $a->amount = $suborder->amount;
                $table->data[] = array("<b>{$strs->confirm}:</b>", get_string('subvoidyes', 'enrol_authorize', $a) . '<br />' . authorize_print_action_button($orderid, ORDER_VOID, $suborderid, true, $authstrs->unenrolstudent, $strs->no));
                echo html_writer::table($table);
            }
        }
    } else {
        echo html_writer::table($table);
        if ($settled) {
            // show refunds.
            $t2 = new html_table();
            $t2->size = array('45%', '15%', '20%', '10%', '10%');
            $t2->align = array('right', 'right', 'right', 'right', 'right');
            $t2->head = array($authstrs->settlementdate, $authstrs->transid, $strs->status, $strs->action, $authstrs->amount);
            $sql = "SELECT r.*, e.courseid, e.paymentmethod\n                      FROM {enrol_authorize_refunds} r\n                INNER JOIN {enrol_authorize} e\n                        ON r.orderid = e.id\n                     WHERE r.orderid = ?";
            if ($refunds = $DB->get_records_sql($sql, array($orderid))) {
                $sumrefund = floatval(0.0);
                foreach ($refunds as $rf) {
                    $subactions = '';
                    $substatus = authorize_get_status_action($rf);
                    if (empty($substatus->actions)) {
                        $subactions .= $strs->none;
                    } else {
                        foreach ($substatus->actions as $vl) {
                            $subactions .= authorize_print_action_button($orderid, $vl, $rf->id);
                        }
                    }
                    $sign = '';
                    $color = authorize_get_status_color($substatus->status);
                    if ($substatus->status == 'refunded' or $substatus->status == 'settled') {
                        $sign = '-';
                        $sumrefund += floatval($rf->amount);
                    }
                    $t2->data[] = array(userdate($rf->settletime), $rf->transid, "<b><font style='color:{$color}'>" . $authstrs->{$substatus->status} . "</font></b>", $subactions, format_float($sign . $rf->amount, 2));
                }
                $t2->data[] = array('', '', get_string('total'), $order->currency, format_float('-' . $sumrefund, 2));
            } else {
                $t2->data[] = array('', '', get_string('noreturns', 'enrol_authorize'), '', '');
            }
            echo "<h4>" . get_string('returns', 'enrol_authorize') . "</h4>\n";
            echo html_writer::table($t2);
        }
    }
    echo $OUTPUT->footer();
}
Exemplo n.º 13
0
 /**
  * Enrols user to course with the default role
  *
  * @param string $username   The username of the remote use
  * @param int    $courseid   The id of the local course
  * @return bool              Whether the enrolment has been successful
  */
 function enrol_user($user, $courseid)
 {
     global $MNET, $MNET_REMOTE_CLIENT;
     $userrecord = get_record('user', 'username', addslashes($user['username']), 'mnethostid', $MNET_REMOTE_CLIENT->id);
     if ($userrecord == false) {
         $userrecord = new stdClass();
         $userrecord->username = addslashes($user['username']);
         $userrecord->email = addslashes($user['email']);
         $userrecord->firstname = addslashes($user['firstname']);
         $userrecord->lastname = addslashes($user['lastname']);
         $userrecord->mnethostid = $MNET_REMOTE_CLIENT->id;
         if ($userrecord->id = insert_record('user', $userrecord)) {
             $userrecord = get_record('user', 'id', $userrecord->id);
         } else {
             // TODO: Error out
             return false;
         }
     }
     if (!($course = get_record('course', 'id', $courseid))) {
         // TODO: Error out
         return false;
     }
     $courses = $this->available_courses();
     if (!empty($courses[$courseid])) {
         if (enrol_into_course($course, $userrecord, 'mnet')) {
             return true;
         }
     }
     return false;
 }
Exemplo n.º 14
0
 /**
  * Enrols the current user in the specified course
  * NOTE: a side effect of this is that it logs-in the user
  * @param object $sloodle_course A {@link SloodleCourse} object setup for the necessary course. If null, then the {@link $_session} member is queried instead.
  * @param bool True if successful (or the user was already enrolled), or false otherwise
  * @access public
  */
 function enrol($sloodle_course = null)
 {
     global $USER, $CFG;
     // Attempt to log-in the user
     if (!$this->login()) {
         return false;
     }
     // Was course data provided?
     if (empty($sloodle_course)) {
         // No - attempt to get some from the Sloodle session
         if (empty($this->_session)) {
             return false;
         }
         if (empty($this->_session->course)) {
             return false;
         }
         $sloodle_course = $this->_session->course;
     }
     // NOTE: much of this stuff was lifted from the Moodle 1.8 "course/enrol.php" script
     // Fetch the Moodle course data, and a course context
     $course = $sloodle_course->get_course_object();
     if (!($context = get_context_instance(CONTEXT_COURSE, $course->id))) {
         return false;
     }
     // Ensure we have up-to-date capabilities for the current user
     load_all_capabilities();
     // Check if the user can view the course, and does not simply have guest access to it
     // (No point trying to enrol somebody if they are already enrolled!)
     if (has_capability('moodle/course:view', $context) && !has_capability('moodle/legacy:guest', $context, NULL, false)) {
         return true;
     }
     // Make sure auto-registration is enabled for this site/course, and that the controller (if applicable) is enabled
     if (!$sloodle_course->check_autoreg()) {
         return false;
     }
     // Can't enrol users on meta courses or the site course
     if ($course->metacourse || $course->id == SITEID) {
         return false;
     }
     // Is there an enrolment period in effect?
     if ($course->enrolperiod) {
         if ($roles = get_user_roles($context, $USER->id)) {
             foreach ($roles as $role) {
                 if ($role->timestart && $role->timestart >= time()) {
                     return false;
                 }
             }
         }
     }
     // Make sure the course is enrollable
     if (!$course->enrollable || $course->enrollable == 2 && $course->enrolstartdate > 0 && $course->enrolstartdate > time() || $course->enrollable == 2 && $course->enrolenddate > 0 && $course->enrolenddate <= time()) {
         return false;
     }
     // Finally, after all that, enrol the user
     if (!enrol_into_course($course, $USER, 'manual')) {
         return false;
     }
     // Everything seems fine
     // Log the auto-enrolment
     add_to_log($course->id, 'sloodle', 'update', '', 'auto-enrolment');
     return true;
 }