From: Simon H. <sim...@us...> - 2009-02-22 20:14:19
|
Update of /cvsroot/stack/stack-dev/opaque In directory fdv4jf1.ch3.sourceforge.com:/tmp/cvs-serv516/opaque Modified Files: Tag: stack_cache MoodleDisplayItem.php Log Message: Almost bug-free implementation... Index: MoodleDisplayItem.php =================================================================== RCS file: /cvsroot/stack/stack-dev/opaque/MoodleDisplayItem.php,v retrieving revision 1.3.6.19 retrieving revision 1.3.6.20 diff -C2 -d -r1.3.6.19 -r1.3.6.20 *** MoodleDisplayItem.php 20 Feb 2009 19:32:48 -0000 1.3.6.19 --- MoodleDisplayItem.php 22 Feb 2009 20:14:15 -0000 1.3.6.20 *************** *** 178,195 **** //if(NULL == $posted) return; // nothing to do! - /* - * Proposed logic: - * Ignore GRADE events. - * Save button and link save performs display with no processing. - * CLOSE and Submit button perform processing. - * Don't understand why earlier states are being processed. - * - * Problem - to processRequest or not..? - * If we process SAVES then we can SAVE to submission. - * If we don't process SAVES then they won't take effect since no attempts are added. - * Possible solutions: - * - Ignore SAVE (and GRADE) events and hack-hide the save button. - * - Modify DI:processQuestion to allow inputs to be updated (saved) without being processed. - */ // set up different item processing options depending on event type switch($event) { --- 178,181 ---- *************** *** 206,210 **** // ignore $this->logger->finer("Quiz firing a GRADE (3) event at cache state ".$this->cacheNode); ! return $cache->getXHTML($this->cacheNode); // just return where we are break; case 7: // SUBMIT (explicit user action) --- 192,198 ---- // ignore $this->logger->finer("Quiz firing a GRADE (3) event at cache state ".$this->cacheNode); ! return $this->processItem($posted, false); ! //return ! //$cache->getXHTML($this->cacheNode); // just return where we are break; case 7: // SUBMIT (explicit user action) *************** *** 217,221 **** break; default: // Initial non-event ! $this->logger->finer("Quiz firing an no event ($event) at cache state ".$this->cacheNode); return $this->processItem($posted, $processRequest); } --- 205,209 ---- break; default: // Initial non-event ! $this->logger->finer("Quiz firing an non-event ($event) at cache state ".$this->cacheNode); return $this->processItem($posted, $processRequest); } *************** *** 238,251 **** else { $this->logger->finest("Question state not cached so must process."); // get current state from cache $item = $cache->getDisplayItem($this->cacheNode); ! // will check for increment in number of attempts $initAttempts = $item->numberOfAttempts(); $xhtml = $item->processQuestion($posted, $processRequest); $newAttempts = $item->numberOfAttempts(); ! // new attempt resulting or new answers being saved ! if($newAttempts > $initAttempts){//} || $cache->newAnswer($posted, $this->cacheNode)) { // cache resulting state, updating cacheNode $this->cacheNode = --- 226,242 ---- else { $this->logger->finest("Question state not cached so must process."); + // get current state from cache $item = $cache->getDisplayItem($this->cacheNode); ! // process question with check for successfully registered attempt $initAttempts = $item->numberOfAttempts(); $xhtml = $item->processQuestion($posted, $processRequest); $newAttempts = $item->numberOfAttempts(); ! $this->logger->finer(($newAttempts - $initAttempts)." new attempts in pI"); ! ! // create new state if new attempt registered or posted answer (not in cache) has changed ! if($cache->newAnswer($posted, $this->cacheNode) || $newAttempts > $initAttempts) { // novel input for this state // cache resulting state, updating cacheNode $this->cacheNode = *************** *** 253,259 **** $posted, $xhtml, $item->getQuestionNote(), $item->getCurrentTotalMark(), $item->getTotalPossibleMarks()); ! } else { // repeat of current attempt - loop back $cache->addTransition($this->cacheNode, $this->cacheNode, $posted); ! $this->logger->finest("Not a new attempt. Linking back to current state."); } } --- 244,252 ---- $posted, $xhtml, $item->getQuestionNote(), $item->getCurrentTotalMark(), $item->getTotalPossibleMarks()); ! $this->logger->finer("Processing item triggered new cache state."); ! } else { ! // No change in posted answer or answer state, so loop back. $cache->addTransition($this->cacheNode, $this->cacheNode, $posted); ! $this->logger->finer("Linking back to current cache state."); } } |