libdir.'/tablelib.php'); $perpage = 10; $status = optional_param('status', AN_STATUS_NONE, PARAM_INT); $searchtype = optional_param('searchtype', 'id', PARAM_ALPHA); $idortransid = optional_param('idortransid', '0', PARAM_INT); $showonlymy = optional_param('showonlymy', 0, PARAM_BOOL); $canmanagepayments = has_capability('enrol/authorize:managepayments', get_context_instance(CONTEXT_COURSE, $courseid)); if ($showonlymy || !$canmanagepayments) { $userid = $USER->id; } $baseurl = $CFG->wwwroot."/enrol/authorize/index.php?user=$userid"; $statusmenu = array(AN_STATUS_NONE => $strs->all, AN_STATUS_AUTH | AN_STATUS_UNDERREVIEW | AN_STATUS_APPROVEDREVIEW => $authstrs->allpendingorders, AN_STATUS_AUTH => $authstrs->authorizedpendingcapture, AN_STATUS_AUTHCAPTURE => $authstrs->authcaptured, AN_STATUS_CREDIT => $authstrs->refunded, AN_STATUS_VOID => $authstrs->cancelled, AN_STATUS_EXPIRE => $authstrs->expired, AN_STATUS_UNDERREVIEW => $authstrs->underreview, AN_STATUS_APPROVEDREVIEW => $authstrs->approvedreview, AN_STATUS_REVIEWFAILED => $authstrs->reviewfailed, AN_STATUS_TEST => $authstrs->tested ); $sql = "SELECT c.id, c.fullname FROM {$CFG->prefix}course c INNER JOIN {$CFG->prefix}enrol_authorize e ON c.id = e.courseid "; if ($userid > 0) { $sql .= "WHERE (e.userid='$userid') "; } $sql .= "ORDER BY c.sortorder, c.fullname"; if (($popupcrs = get_records_sql_menu($sql))) { $popupcrs = array($SITE->id => $SITE->fullname) + $popupcrs; echo ""; echo ""; echo "\n"; echo "\n"; if (has_capability('enrol/authorize:uploadcsv', get_context_instance(CONTEXT_USER, $USER->id))) { echo ""; echo ""; echo ""; } else { echo ""; } echo "\n"; echo ""; $searchmenu = array('id' => $authstrs->orderid, 'transid' => $authstrs->transid); echo ""; echo ""; echo ""; echo ""; echo "
$strs->status: "; popup_form($baseurl.'&course='.$courseid.'&status=',$statusmenu,'statusmenu',$status,'','','',false); if ($canmanagepayments) { echo "
\n"; print_checkbox('showonlymy', '1', $userid == $USER->id, get_string('mypaymentsonly', 'enrol_authorize'), '', "var locationtogo = '{$CFG->wwwroot}/enrol/authorize/index.php?status=$status&course=$courseid'; locationtogo += '&user=' + (this.checked ? '$USER->id' : '0'); top.location.href=locationtogo;"); } echo "
$strs->course: "; popup_form($baseurl.'&status='.$status.'&course=',$popupcrs,'coursesmenu',$courseid,'','','',false);echo"
 
$strs->search:
"; choose_from_menu($searchmenu, 'searchtype', $searchtype, ''); echo " =
"; echo "
"; } $table = new flexible_table('enrol-authorize'); $table->set_attribute('width', '100%'); $table->set_attribute('cellspacing', '0'); $table->set_attribute('cellpadding', '3'); $table->set_attribute('id', 'orders'); $table->set_attribute('class', 'generaltable generalbox'); $table->define_columns(array('id', 'timecreated', 'userid', 'status', '')); $table->define_headers(array($authstrs->orderid, $strs->time, $authstrs->nameoncard, $strs->status, $strs->action)); $table->define_baseurl($baseurl."&status=$status&course=$courseid"); $table->sortable(true, 'id', SORT_DESC); $table->pageable(true); $table->setup(); $select = "SELECT e.id, e.paymentmethod, e.transid, e.courseid, e.userid, e.status, e.ccname, e.timecreated, e.settletime "; $from = "FROM {$CFG->prefix}enrol_authorize e "; $where = "WHERE (1=1) "; if ($status > AN_STATUS_NONE) { switch ($status) { case AN_STATUS_AUTH | AN_STATUS_UNDERREVIEW | AN_STATUS_APPROVEDREVIEW: $where .= 'AND (e.status IN('.AN_STATUS_AUTH.','.AN_STATUS_UNDERREVIEW.','.AN_STATUS_APPROVEDREVIEW.')) '; break; case AN_STATUS_CREDIT: $from .= "INNER JOIN {$CFG->prefix}enrol_authorize_refunds r ON e.id = r.orderid "; $where .= "AND (e.status = '" . AN_STATUS_AUTHCAPTURE . "') "; break; case AN_STATUS_TEST: $newordertime = time() - 120; // -2 minutes. Order may be still in process. $where .= "AND (e.status = '" . AN_STATUS_NONE . "') AND (e.transid = '0') AND (e.timecreated < $newordertime) "; break; default: $where .= "AND (e.status = '$status') "; break; } } else { if (empty($CFG->an_test)) { $where .= "AND (e.status != '" . AN_STATUS_NONE . "') "; } } if ($courseid != SITEID) { $where .= "AND (e.courseid = '" . $courseid . "') "; } if (!empty($idortransid)) { // Ignore old where. if ($searchtype == 'transid') { $where = "WHERE (e.transid = $idortransid) "; } else { $where = "WHERE (e.id = $idortransid) "; } } // This must be always last where!!! if ($userid > 0) { $where .= "AND (e.userid = '" . $userid . "') "; } if (($sort = $table->get_sql_sort())) { $sort = ' ORDER BY ' . $sort; } $totalcount = count_records_sql('SELECT COUNT(*) ' . $from . $where); $table->initialbars($totalcount > $perpage); $table->pagesize($perpage, $totalcount); if (($records = get_records_sql($select . $from . $where . $sort, $table->get_page_start(), $table->get_page_size()))) { foreach ($records as $record) { $actionstatus = authorize_get_status_action($record); $color = authorize_get_status_color($actionstatus->status); $actions = ''; if (empty($actionstatus->actions)) { $actions .= $strs->none; } else { foreach ($actionstatus->actions as $value) { $actions .= "  {$authstrs->$value} "; } } $table->add_data(array( "$record->id", userdate($record->timecreated), $record->ccname, "" . $authstrs->{$actionstatus->status} . "", $actions )); } } $table->print_html(); } /** * 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 "
\n"; echo "
"; echo "\n"; echo ""; $settled = authorize_settled($order); $status = authorize_get_status_action($order); $table->data[] = array("$authstrs->paymentmethod:", ($order->paymentmethod == AN_METHOD_CC ? $authstrs->methodcc : $authstrs->methodecheck)); $table->data[] = array("$authstrs->orderid:", $orderno); $table->data[] = array("$authstrs->transid:", $order->transid); $table->data[] = array("$authstrs->amount:", "$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("$strs->course:", format_string($course->shortname)); $table->data[] = array("$strs->status:", "" . $authstrs->{$status->status} . ""); if ($order->paymentmethod == AN_METHOD_CC) { $table->data[] = array("$authstrs->nameoncard:", $order->ccname); } else { $table->data[] = array("$authstrs->echeckfirslasttname:", $order->ccname); } $table->data[] = array("$strs->time:", userdate($order->timecreated)); $table->data[] = array("$authstrs->settlementdate:", $settled ? userdate($order->settletime) : $authstrs->notsettled); } $table->data[] = array(" ", "
\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("$strs->confirm:", "$strcaptureyes
   $strs->no"); } else { $message = ''; $extra = NULL; if (AN_APPROVED != authorize_action($order, $message, $extra, AN_ACTION_PRIOR_AUTH_CAPTURE)) { $table->data[] = array("$strs->error:", $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("$strs->error:", "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("$authstrs->unenrolstudent", $cbunenrol); $table->data[] = array("$strhowmuch", " $strcanbecredit
"); } 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("$strs->error:", '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("$strs->error:", $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("$strs->confirm:", "$strvoidyes
    $strs->no"); } 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("$strs->error:", $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("$authstrs->unenrolstudent", $cbunenrol); $table->data[] = array("$strs->confirm:", "$strsubvoidyes
    $strs->no"); } 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("$strs->error:", $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("$authstrs->unenrolstudent", $cbunenrol); $table->data[] = array("$strs->confirm:", "     $strs->no"); } 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 .= ''.get_string('uploadcsv', 'enrol_authorize').''; } else { $actions .= $strs->none; } } else { foreach ($status->actions as $value) { $actions .= " "; } } $table->data[] = array("$strs->action", $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 = ' '; if (empty($substatus->actions)) { $subactions .= $strs->none; } else { foreach ($substatus->actions as $vl) { $subactions .= "{$authstrs->$vl} "; } } $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, "" .$authstrs->{$substatus->status} . "", $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 "

" . get_string('returns', 'enrol_authorize') . "

\n"; print_table($t2); } } echo '
'; echo '
'; } /** * authorize_get_status_action * * @param object $order Order details. * @return object */ function authorize_get_status_action($order) { global $CFG; static $newordertime; if (empty($newordertime)) { $newordertime = time() - 120; // -2 minutes. Order may be still in process. } $ret = new stdClass(); $ret->actions = array(); $canmanage = has_capability('enrol/authorize:managepayments', get_context_instance(CONTEXT_COURSE, $order->courseid)); if (floatval($order->transid) == 0) { // test transaction or new order if ($order->timecreated < $newordertime) { if ($canmanage) { $ret->actions = array(ORDER_DELETE); } $ret->status = 'tested'; } else { $ret->status = 'new'; } return $ret; } switch ($order->status) { case AN_STATUS_AUTH: if (authorize_expired($order)) { if ($canmanage) { $ret->actions = array(ORDER_DELETE); } $ret->status = 'expired'; } else { if ($canmanage) { $ret->actions = array(ORDER_CAPTURE, ORDER_VOID); } $ret->status = 'authorizedpendingcapture'; } return $ret; case AN_STATUS_AUTHCAPTURE: if (authorize_settled($order)) { if ($canmanage) { if (($order->paymentmethod == AN_METHOD_CC) || ($order->paymentmethod == AN_METHOD_ECHECK && !empty($order->refundinfo))) { $ret->actions = array(ORDER_REFUND); } } $ret->status = 'settled'; } else { if ($order->paymentmethod == AN_METHOD_CC && $canmanage) { $ret->actions = array(ORDER_VOID); } $ret->status = 'capturedpendingsettle'; } return $ret; case AN_STATUS_CREDIT: if (authorize_settled($order)) { $ret->status = 'settled'; } else { if ($order->paymentmethod == AN_METHOD_CC && $canmanage) { $ret->actions = array(ORDER_VOID); } $ret->status = 'refunded'; } return $ret; case AN_STATUS_VOID: $ret->status = 'cancelled'; return $ret; case AN_STATUS_EXPIRE: if ($canmanage) { $ret->actions = array(ORDER_DELETE); } $ret->status = 'expired'; return $ret; case AN_STATUS_UNDERREVIEW: $ret->status = 'underreview'; return $ret; case AN_STATUS_APPROVEDREVIEW: $ret->status = 'approvedreview'; return $ret; case AN_STATUS_REVIEWFAILED: if ($canmanage) { $ret->actions = array(ORDER_DELETE); } $ret->status = 'reviewfailed'; return $ret; default: return $ret; } } function authorize_get_status_color($status) { $color = 'black'; switch ($status) { case 'settled': case 'approvedreview': case 'capturedpendingsettle': $color = '#339900'; // green break; case 'new': case 'tested': case 'underreview': case 'authorizedpendingcapture': $color = '#FF6600'; // orange break; case 'expired': case 'cancelled': case 'refunded'; case 'reviewfailed': $color = '#FF0033'; // red break; } return $color; } ?>