Skip to content
Snippets Groups Projects
Commit 725ea4d6 authored by Tim Steiner's avatar Tim Steiner
Browse files

Change course code conflict checking to a dismissable error.

parent bfa4b0d0
No related branches found
No related tags found
No related merge requests found
......@@ -36,12 +36,7 @@ class Courses_EditController extends App_Controller_Action
$errors = array();
if (!in_array($request->getType(), array('RemoveCourse', 'AddACEToCourse', 'RemoveACEFromCourse'))) {
if ($this->_courseCodeIsAvailable($course, $in->subject, $in->courseNumber, $in->courseLetter)) {
$course->setCourseCode($in->subject, $in->courseNumber, $in->courseLetter);
} else {
$errors['courseCode'] = 'The course code ' . $in->subject . ' ' . $in->courseNumber . $in->courseLetter
. ' is not available.';
}
$course->setCourseCode($in->subject, $in->courseNumber, $in->courseLetter);
$course->setTitle($in->title);
if (Unl_Util::isArray($in->crosslistings)) {
foreach ($in->crosslistings as $id => $crosslisting) {
......@@ -57,11 +52,6 @@ class Courses_EditController extends App_Controller_Action
if ($crosslisting->delete == 'yes') {
$course->removeCrosslisting($id);
} else {
if (!$this->_courseCodeIsAvailable($course, $crosslisting->subject, $crosslisting->courseNumber, $crosslisting->courseLetter)) {
$errors['crosslistings'][] = 'The course code ' . $crosslisting->subject . ' ' . $crosslisting->courseNumber . $crosslisting->courseLetter
. ' is not available.';
continue;
}
if ($crosslisting->action == 'edit') {
$course->editCrosslisting($id, $crosslisting->type, $crosslisting->subject, $crosslisting->courseNumber, $crosslisting->courseLetter);
} else {
......@@ -339,4 +329,29 @@ class Courses_EditController extends App_Controller_Action
return true;
}
protected function isCourseCodeAvailableAction()
{
$in = $this->_getAllParams();
$session = new Zend_Session_Namespace('Edit Request');
$course = $session->course;
$available = $this->_courseCodeIsAvailable($course, $in['subject'], $in['courseNumber'], $in['courseLetter']);
$dom = new DOMDocument();
$root = $dom->createElement('response');
$dom->appendChild($root);
if ($available) {
$responseNode = $dom->createElement('true');
} else {
$responseNode = $dom->createElement('false');
}
$root->appendChild($responseNode);
header('Content-type: text/xml');
echo $dom->saveXML();
exit;
}
}
......@@ -16,17 +16,13 @@
<div class="main_section">
<h2>Course ID</h2>
<?php if ($this->errors['courseCode']) { ?>
<div class="error">
<?php echo $this->errors['courseCode']; ?>
</div>
<?php } ?>
<fieldset class="three_column" id="courseId">
<div class="column">
<label for="subject" class="required">Subject:</label>
<input type="text"
id="subject"
name="subject"
class="courseCodeInput"
value="<?php echo htmlentities($this->course->getSubject(), ENT_COMPAT, 'UTF-8'); ?>" />
</div>
......@@ -36,6 +32,7 @@
<input type="text"
id="courseNumber"
name="courseNumber"
class="courseCodeInput"
value="<?php echo htmlentities($this->course->getCourseNumber(), ENT_COMPAT, 'UTF-8'); ?>" />
</div>
......@@ -44,6 +41,7 @@
<input type="text"
id="courseLetter"
name="courseLetter"
class="courseCodeInput"
value="<?php echo htmlentities($this->course->getCourseLetter(), ENT_COMPAT, 'UTF-8'); ?>" />
</div>
......@@ -62,14 +60,6 @@
<fieldset class="three_column">
<h3>Crosslistings</h3>
<?php if ($this->errors['crosslistings']) { ?>
<div class="error">
<?php foreach ($this->errors['crosslistings'] as $error) { ?>
<?php echo $error; ?><br />
<?php } ?>
</div>
<?php } ?>
<table>
<?php $hasTieIn = false;
foreach($this->course->getCrosslistings() as $key => $crosslist) {
......@@ -83,16 +73,19 @@
<?php if($crosslist['type'] == 'grad tie-in') { ?>readonly=""<?php } ?>/>
<input type="text"
name="crosslistings[<?php echo $key; ?>][subject]"
class="courseCodeInput"
value="<?php echo $crosslist['subject']; ?>"
<?php if($crosslist['type'] == 'grad tie-in') { ?>readonly=""<?php } ?>/> </td>
<th> Course Number: </th>
<td> <input type="text"
name="crosslistings[<?php echo $key; ?>][courseNumber]"
class="courseCodeInput"
value="<?php echo $crosslist['courseNumber']; ?>"
<?php if($crosslist['type'] == 'grad tie-in') { ?>readonly=""<?php } ?> /> </td>
<th> Course Letter: </th>
<td> <input type="text"
name="crosslistings[<?php echo $key; ?>][courseLetter]"
class="courseCodeInput"
value="<?php echo $crosslist['courseLetter']; ?>"
<?php if($crosslist['type'] == 'grad tie-in') { ?>readonly=""<?php } ?> /> </td>
<td class="hidden">
......@@ -110,11 +103,11 @@
<?php } } ?>
<tr class="hidden_new_record">
<th> Subject: </th>
<td> <input disabled="disabled" type="text" name="crosslistings[__key__][subject]" /> </td>
<td> <input disabled="disabled" type="text" class="courseCodeInput" name="crosslistings[__key__][subject]" /> </td>
<th> Course Number: </th>
<td> <input disabled="disabled" type="text" name="crosslistings[__key__][courseNumber]" /> </td>
<td> <input disabled="disabled" type="text" class="courseCodeInput" name="crosslistings[__key__][courseNumber]" /> </td>
<th> Course Letter: </th>
<td> <input disabled="disabled" type="text" name="crosslistings[__key__][courseLetter]" /> </td>
<td> <input disabled="disabled" type="text" class="courseCodeInput" name="crosslistings[__key__][courseLetter]" /> </td>
<td class="hidden"> <input disabled="disabled" type="hidden" name="crosslistings[__key__][type]" value="crosslisting" /> </td>
<td> <a href="#" class="remove_record_button">Remove</a> </td>
</tr>
......
......@@ -53,6 +53,11 @@ function onEditWrapperLoad()
}
}
}
var courseCodeInputs = getElementsByClass('courseCodeInput');
for (var i = 0; i != courseCodeInputs.length; i++) {
courseCodeInputs[i].onchange = handleCourseCodeInputChange;
}
}
......@@ -113,6 +118,12 @@ function handleAddRecord()
newNode.className = 'grad_tie_in_row';
}
var courseCodeInputs = getElementsByClass('courseCodeInput');
for (var i = 0; i != courseCodeInputs.length; i++) {
courseCodeInputs[i].onchange = handleCourseCodeInputChange;
}
return false;
}
......@@ -251,3 +262,47 @@ function enforceMaximumSelectionCount(inputNodes, toggledInput, maxSelected, hid
}
}
}
function handleCourseCodeInputChange()
{
var courseCodeNodes = this.parentNode.parentNode.getElementsByTagName('input');
var ajax = new courseCodeAvailableAjaxResponder();
ajax.subjectNode = courseCodeNodes[0];
ajax.courseNumberNode = courseCodeNodes[1];
ajax.courseLetterNode = courseCodeNodes[2];
ajax.sendRequest(ajax.getUrl());
}
var courseCodeAvailableAjaxResponder = AjaxClient.extend(
{
subjectNode: null,
courseNumberNode: null,
courseLetterNode: null,
processResponse: function() {
if(this.requestObject.responseXML.childNodes[0].childNodes[0].nodeName == 'true') {
return;
}
var message = 'The course code '
+ this.subjectNode.value + ' ' + this.courseNumberNode.value + this.courseLetterNode.value
+ ' belongs to an active course. Clik OK if you are you sure you want to continue.';
if (confirm(message)) {
return;
}
this.subjectNode.value = '';
this.courseNumberNode.value = '';
this.courseLetterNode.value = '';
},
getUrl: function() {
return baseUrl
+ '/courses/edit/is-course-code-available'
+ '/subject/' + this.subjectNode.value
+ '/courseNumber/' + this.courseNumberNode.value
+ '/courseLetter/' + this.courseLetterNode.value;
}
});
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment