diff --git a/ajax/editActivity.php b/ajax/editActivity.php index 91e7a5835..b41eadfaa 100755 --- a/ajax/editActivity.php +++ b/ajax/editActivity.php @@ -63,7 +63,7 @@ $activityID = $_REQUEST['activityID']; $type = $_REQUEST['type']; -$jobOrderID = $_REQUEST['jobOrderID']; +$jobOrderID = isset($_REQUEST['jobOrderID']) ? trim($_REQUEST['jobOrderID']) : null; /* Decode and trim the activity notes from the company. */ $activityNote = trim(urldecode($_REQUEST['notes'])); @@ -78,6 +78,13 @@ return; } +if ($jobOrderID === null || $jobOrderID === '' || $jobOrderID === 'NULL' || + $jobOrderID === '0' || $jobOrderID === '-1' || !is_numeric($jobOrderID) || + (int) $jobOrderID <= 0) +{ + $jobOrderID = -1; +} + /* Convert formatted time to UNIX timestamp. */ $time = strtotime( sprintf('%02d:%02d %s', $activityHour, $activityMinute, $activityAMPM) diff --git a/js/activity.js b/js/activity.js index 3824c8e23..2c687b4d7 100755 --- a/js/activity.js +++ b/js/activity.js @@ -116,13 +116,20 @@ function Activity_fillTypeSelect(selectList, selectedText) } } -function Activity_fillRegardingSelect(selectList, jobOrderNodes, selectedText) +function Activity_fillRegardingSelect(selectList, jobOrderNodes, selectedText, selectedJobOrderID) { + var hasValidJobOrderID = false; + + if (selectedJobOrderID && selectedJobOrderID.match(/^\d+$/) && selectedJobOrderID != '0') + { + hasValidJobOrderID = true; + } + /* General option. */ generalOption = document.createElement('option'); generalOption.value = 'NULL'; generalOption.appendChild(document.createTextNode('General')); - if (selectedText == 'General') + if (!hasValidJobOrderID) { generalOption.setAttribute('selected', 'selected'); } @@ -153,10 +160,15 @@ function Activity_fillRegardingSelect(selectList, jobOrderNodes, selectedText) option.value = IDNode.firstChild.nodeValue; option.appendChild(document.createTextNode(optionText)); - if (selectedText == optionText) + if (hasValidJobOrderID && option.value == selectedJobOrderID) { option.setAttribute('selected', 'selected'); } + else if (!hasValidJobOrderID && selectedText == optionText) + { + generalOption.removeAttribute('selected'); + option.setAttribute('selected', 'selected'); + } selectList.appendChild(option); } } @@ -235,10 +247,16 @@ function Activity_editEntry(activityID, dataItemID, dataItemType, sessionCookie) /* Create the "Regarding" select list and add options to it. */ var regardingSelectList = document.createElement('select'); + var selectedJobOrderID = ''; + if (regardingTD && regardingTD.getAttribute) + { + selectedJobOrderID = regardingTD.getAttribute('data-joborder-id'); + } Activity_fillRegardingSelect( regardingSelectList, http.responseXML.getElementsByTagName('joborder'), - regardingTD.firstChild.nodeValue + regardingTD.firstChild.nodeValue, + selectedJobOrderID ); regardingSelectList.className = 'inputbox'; diff --git a/lib/ActivityEntries.php b/lib/ActivityEntries.php index aae547979..660515e8c 100755 --- a/lib/ActivityEntries.php +++ b/lib/ActivityEntries.php @@ -80,12 +80,17 @@ public function __construct($siteID) * @param flag Activity type flag. * @param string Activity notes. * @param integer Entered-by user ID. - * @param integer Job Order ID; -1 for general. + * @param integer Job Order ID; -1 for general (stored as NULL). * @return integer New Activity ID; -1 on failure. */ public function add($dataItemID, $dataItemType, $activityType, $activityNotes, $enteredBy, $jobOrderID = -1) { + if (!ctype_digit((string) $jobOrderID) || (int) $jobOrderID <= 0) + { + $jobOrderID = -1; + } + $sql = sprintf( "INSERT INTO activity ( data_item_id, @@ -111,7 +116,7 @@ public function add($dataItemID, $dataItemType, $activityType, )", $this->_db->makeQueryInteger($dataItemID), $this->_db->makeQueryInteger($dataItemType), - $this->_db->makeQueryInteger($jobOrderID), + $this->_db->makeQueryIntegerOrNULL($jobOrderID), $this->_db->makeQueryInteger($enteredBy), $this->_db->makeQueryInteger($activityType), $this->_db->makeQueryString($activityNotes), @@ -142,7 +147,8 @@ public function add($dataItemID, $dataItemType, $activityType, /* If there is a job order being associated, update it's modified * timestamp, too. */ - if ($jobOrderID != -1) + if (!empty($jobOrderID) && ctype_digit((string) $jobOrderID) && + (int) $jobOrderID > 0) { $this->_updateDataItemModified($jobOrderID, DATA_ITEM_JOBORDER); } @@ -156,7 +162,7 @@ public function add($dataItemID, $dataItemType, $activityType, * @param integer Activity ID to update. * @param flag New activity type flag. * @param string New activity notes. - * @param integer New Job Order ID; -1 for general. + * @param integer New Job Order ID; -1 for general (stored as NULL). * @return boolean True if successful; false otherwise. */ public function update($activityID, $activityType, $activityNotes, @@ -203,6 +209,11 @@ public function update($activityID, $activityType, $activityNotes, $newJobOrderID = $jobOrderID; } + if (!ctype_digit((string) $newJobOrderID) || (int) $newJobOrderID <= 0) + { + $newJobOrderID = -1; + } + $sql = sprintf( "UPDATE activity @@ -217,7 +228,7 @@ public function update($activityID, $activityType, $activityNotes, site_id = %s", $this->_db->makeQueryInteger($activityType), $this->_db->makeQueryString($activityNotes), - $this->_db->makeQueryInteger($newJobOrderID), + $this->_db->makeQueryIntegerOrNULL($newJobOrderID), $this->_db->makeQueryInteger($activityID), $this->_siteID ); @@ -267,7 +278,8 @@ public function update($activityID, $activityType, $activityNotes, /* If there is a job order being associated, update it's modified * timestamp, too. */ - if (!empty($jobOrderID) && ctype_digit((string) $jobOrderID)) + if (!empty($jobOrderID) && ctype_digit((string) $jobOrderID) && + (int) $jobOrderID > 0) { $this->_updateDataItemModified($jobOrderID, DATA_ITEM_JOBORDER); } @@ -276,7 +288,7 @@ public function update($activityID, $activityType, $activityNotes, * is valid, update its modified timestamp, too. */ if (!empty($newJobOrderID) && ctype_digit((string) $newJobOrderID) && - $jobOrderID != $newJobOrderID) + (int) $newJobOrderID > 0 && $jobOrderID != $newJobOrderID) { $this->_updateDataItemModified($newJobOrderID, DATA_ITEM_JOBORDER); } diff --git a/modules/candidates/Show.tpl b/modules/candidates/Show.tpl index 92ca84f4e..404af0f7d 100755 --- a/modules/candidates/Show.tpl +++ b/modules/candidates/Show.tpl @@ -599,7 +599,7 @@ use OpenCATS\UI\CandidateDuplicateQuickActionMenu;